taking differences and moving averages
13 次查看(过去 30 天)
显示 更早的评论
I have a spreadsheet with
column 1 =date
column 2 =temperature
I now want to have
column 3 = differences between today's temperature - yesterday's temperature
column 4 = 7 day moving average of column 3
Thank you.
0 个评论
采纳的回答
Nicole Peltier
2020-5-25
编辑:Nicole Peltier
2020-5-25
diff(x) = [x(2)-x(1), x(3)-x(2), ...]
Keep in mind that diff will give you a vector with one less item than in columns 2 and 1. So you may want to say something like:
Column3(1) = NaN;
Column3(2:end) = diff(Column2);
To avoid an error, you need to preallocate the size of Column3. If you haven't already, you need a line before the two above that looks like this:
Column3 = nan(length(Column2), 1);
That creates a variable with the number of items that you need. You can then replace values with the ones that you calculate using diff. (If you preallocate values to be NaN, then you actually don't need the line Column3(1)=NaN because it already is NaN.)
For column 4, look into movmean. The following would give you a moving average with a window width of 7:
Column4 = movmean(Column3, 7);
% Moving window is centered on index of input, example below
% Column4(6) = mean(Column4(3:9))
The moving window will be centered on the index of the input (example in comment above). If you want column 4 to represent the average of the last 6 days plus today, you'd want to enter:
Column4 = movmean(Column3, [6, 0]);
Hope this helps!
4 个评论
Nicole Peltier
2020-5-25
I updated my answer above to show you how you can preallocate new. If you don't set the size of the variable, then MATLAB doesn't know what the end element is of your variable new, hence the error.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!