Calculate average for each hour in day

24 次查看(过去 30 天)
I have a bunch of data in datetime format similar to this:
2010-Nov-30 18:00.00 0 8.7 17.05 61.38
I have summed all the data into hours, but I would like to calculate the average at every hour 00:00, 01:00, 02:00... 23:00 for every day in the year.
I have data for a whole year, so I'm interested in seeing the average values in a day, per hour, with the data from the whole year.
I've tried to use retime but I can't really get it to function correctly. Maybe it's the wrong function for this purpose.
  3 个评论
Oliver Zacho
Oliver Zacho 2020-6-20
I can't get it to group all the hours from the whole year into on matrix that's 24-by-x with the mean from every hour.
Do you have a hint? :)
Adam Danz
Adam Danz 2020-6-20
Could you show us what you tried and describe the input variables used? It will be easier to help you tweek that instead of creating a different example out of our imaginations that may not even be suitable with your data.

请先登录,再进行评论。

采纳的回答

dpb
dpb 2020-6-20
IIUC, retime is not the tool for this; it bins data into desired time segments such as hourly but averages within those bins.
To compute an average of all observations in the dataset at each exact hour, use a grouping variable and varfun or groupsummary or grpsummary (latter requires Statistics Toolbox and has essentially been replaced by former in base MATLAB).
You will have to group by sufficiently-fine resolution to isolate the one actual top-oif-the-hour reading by hours(), minutes(), seconds(), ... depending upon the time-of-day readings in the dataset.
  6 个评论
Oliver Zacho
Oliver Zacho 2020-6-20
Ohhh I see! Thanks for pointing that out!
My solution is now simply to set the date to 0 when I'm making my datetime.
t = datetime(0,0,0,dataAR(:,4),dataAR(:,5),dataAR(:,6),'Format','HH:mm:ss');
This seems to do the job!
Thanks alot for the explanation!
Have a good evening (depending on your timezone) :)
dpb
dpb 2020-6-20
The better solution is probably to just use hour() of the real datetime -- that will return a double from 0-23 for each.
Since you have only the one hourly observation, you won't need the retime step.

请先登录,再进行评论。

更多回答(1 个)

Catriona Fyffe
Catriona Fyffe 2020-7-22
A very simple way to solve this if you have whole days starting at 00:00 is to use reshape. Its a bit old school but I like it! However I have come onto this page to solve this problem for data which doesn't start at 00:00 (not my choice!)
NHours=size(VarA,1);
NDays=NHours/24;
VarA_AH=nanmean(reshape(VarA,[24,NDays]),2);

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by