Finding the difference in timeseries values
31 views (last 30 days)
Show older comments
If I have the below timetable, how do I find the difference between values? Diff() doesn't work. I've tried diff(TableName.Variables), however that removes the Time column and VariableNames.
Time Humidity TemperatureF PressureHg
____________________ ________ ____________ __________
15-Nov-2015 00:00:00 48.9 51.45 29.61
15-Nov-2015 06:00:00 48.9 51.45 29.6
15-Nov-2015 12:00:00 49.025 51.45 29.61
15-Nov-2015 18:00:00 48.9 51.225 29.607
16-Nov-2015 00:00:00 48.5 51.4 29.61
0 Comments
Answers (3)
Star Strider
on 4 Apr 2021
This is kludgy, however I can find no other way to do what you want:
C = {'15-Nov-2015 00:00:00' 48.9 51.45 29.61
'15-Nov-2015 06:00:00' 48.9 51.45 29.6
'15-Nov-2015 12:00:00' 49.025 51.45 29.61
'15-Nov-2015 18:00:00' 48.9 51.225 29.607
'16-Nov-2015 00:00:00' 48.5 51.4 29.61};
T1 = cell2table(C, 'VariableNames',{'Time','Humidity','TemperatureF','PressureHg'}) % Create Table From Data
T1.Time = datetime(T1{:,1}, 'InputFormat','dd-MMM-yyyy HH:mm:ss'); % Create Table From Data
DiffArray = diff(T1{:,2:4}) % Column Differences
DT = table(datetime(diff(datenum(T1{:,1})),'ConvertFrom','datenum','Format','HH:mm'),'VariableNames',{'DiffTime'}); % Time Differences
T2 = [DT array2table(DiffArray, 'VariableNames',{'DiffHumidity','DiffTemperatureF','DiffPressureHg'})]
producing:
T2 =
4×4 table
DiffTime DiffHumidity DiffTemperatureF DiffPressureHg
________ ____________ ________________ ______________
06:00 0 0 -0.01
06:00 0.125 0 0.01
06:00 -0.125 -0.225 -0.003
06:00 -0.4 0.175 0.003
.
0 Comments
Peter Perkins
on 7 Dec 2021
David, you are correct that diff(TableName.Variables) removes the times and the variable names, in fact, it returns a numeric matrix not a timetable!
Applying diff gives you one fewer rows, so one way or another you need to create a new timetable. If you are only diff'ing one variable, then
ttDiff = timetable(diff(tt.X),'RowTimes',tt.Time(2:end),'VariableNames',{'X_diff'})
is one way to go. For three variables (maybe even for just one in this case), varfun is probably the best:
>> tt
tt =
5×3 timetable
Time Humidity TemperatureF PressureHg
____________________ ________ ____________ __________
15-Nov-2015 00:00:00 48.9 51.45 29.61
15-Nov-2015 06:00:00 48.9 51.45 29.6
15-Nov-2015 12:00:00 49.025 51.45 29.61
15-Nov-2015 18:00:00 48.9 51.225 29.607
16-Nov-2015 00:00:00 48.5 51.4 29.61
>> ttDiff = varfun(@diff,tt)
ttDiff =
4×3 timetable
Time diff_Humidity diff_TemperatureF diff_PressureHg
____________________ _____________ _________________ _______________
15-Nov-2015 00:00:00 0 0 -0.01
15-Nov-2015 06:00:00 0.125 0 0.01
15-Nov-2015 12:00:00 -0.125 -0.225 -0.003
15-Nov-2015 18:00:00 -0.4 0.175 0.003
There's also a long example in the doc that talks about "how to perform calculations by using the numeric and categorical data that the table contains" at length:
0 Comments
Siddharth Bhutiya
on 30 Mar 2023
If you are using R2023a, then you can now directly call diff on a timetable. Here is an example,
>> tt
tt =
5x3 timetable
Time Humidity TemperatureF PressureHg
____________________ ________ ____________ __________
15-Nov-2015 00:00:00 48.9 51.45 29.61
15-Nov-2015 06:00:00 48.9 51.45 29.6
15-Nov-2015 12:00:00 49.025 51.45 29.61
15-Nov-2015 18:00:00 48.9 51.225 29.607
16-Nov-2015 00:00:00 48.5 51.4 29.61
>> diff(tt)
ans =
4x3 timetable
Time Humidity TemperatureF PressureHg
____________________ ________ ____________ __________
15-Nov-2015 00:00:00 0 0 -0.01
15-Nov-2015 06:00:00 0.125 0 0.01
15-Nov-2015 12:00:00 -0.125 -0.225 -0.003
15-Nov-2015 18:00:00 -0.4 0.175 0.003
See this documentation page for other arithmetic operations that are now allowed on tables and timetables.
0 Comments
See Also
Categories
Find more on Tables in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!