How to use groupsummary to group by hour-of-year
Show older comments
The "groupsummary" function offers a convenient way to group variables in a table and apply functions such as computing the mean.
For example, if I want to compute the day-of-year mean of a variable named "foo" in a table "myTable" containing daily data with timestamp "date", I would use the command:
myDoyTable = groupsummary(myTable, "date","dayofyear","mean","foo");
This is great for daily data, but I am stumped in the case of hourly data.
Suppose I want to do a similar thing, but now myTable contains hourly data and date has an hourly timestamp.
Ideally I would want to use a command such as:
myDoyTable = groupsummary(myTable, "date","hourofyear","mean","foo");
Unfortunately, there is no "hourofyear" option (though there is hour of day, minute of hour, and many more).
Can anyone suggest a workaround?
Thanks,
-Dino
Answers (2)
the cyclist
on 30 Jun 2023
0 votes
The groupbin option "hour" doesn't do what you want?
(If not, can you upload a sample of input and output data indicating what you want? I'm having a difficult time understanding.)
4 Comments
Dino Bellugi
on 30 Jun 2023
the cyclist
on 1 Jul 2023
I think I understand. I can't test this idea on your data, because you have not uploaded it, but I believe that the following would do what you want.
First, convert your table (or make a copy) to change all of the years to be the same. (Choose a leap year, so that it has a Feb 29.)
Then do groupsummary with groupbin = "hour" on that table. MATLAB doesn't "know" that these are different years, so it includes each hour of each day (regardless of year) in the summary.
Dino Bellugi
on 2 Jul 2023
Dino Bellugi
on 2 Jul 2023
Is this really "hour of year", a value that runs from 0 to 8784? In the same way that day of year is just
dt = datetime(2023,7,17,14,15,0)
doy = between(dateshift(dt,"start","year"),dt,"days") % or maybe - caldays(1)
hour of year is just
hoy = between(dateshift(dt,"start","year"),dt,"time")
hoy = floor(time(hoy),"hours"); hoy.Format = 'h'
If you add an HoY grouping variable to your table, groupsummary can group by that.
Categories
Find more on Calendar 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!