Hourly averages over a 20yr time series

조회 수: 4 (최근 30일)
Ross O'Connell
Ross O'Connell 2021년 3월 10일
댓글: Ross O'Connell 2021년 3월 11일
Hi,
I have a 20yr time series of data with time values for each hour, so ~175,000 time values. I want to calculate an hourly mean for the time series, so for example on Jan 1st at 00:00:00, I will have 20 values at this time over the 20 year series and I would like to calculate the mean, and so on for each date and time. The date and time values are formatted as '01-Jan-2000 00:00:00'.
  댓글 수: 2
Steven Lord
Steven Lord 2021년 3월 10일
To clarify, the first "bin" of your data would take the mean of data from the following dates and times in your time series?
dt = datetime(2000:2020, 1, 1, 0, 0, 0, 'Format', 'dd-MMM-yyyy HH:mm:ss')
dt = 1×21 datetime array
01-Jan-2000 00:00:00 01-Jan-2001 00:00:00 01-Jan-2002 00:00:00 01-Jan-2003 00:00:00 01-Jan-2004 00:00:00 01-Jan-2005 00:00:00 01-Jan-2006 00:00:00 01-Jan-2007 00:00:00 01-Jan-2008 00:00:00 01-Jan-2009 00:00:00 01-Jan-2010 00:00:00 01-Jan-2011 00:00:00 01-Jan-2012 00:00:00 01-Jan-2013 00:00:00 01-Jan-2014 00:00:00 01-Jan-2015 00:00:00 01-Jan-2016 00:00:00 01-Jan-2017 00:00:00 01-Jan-2018 00:00:00 01-Jan-2019 00:00:00 01-Jan-2020 00:00:00
And the next bin would have data from:
dt = datetime(2000:2020, 1, 1, 1, 0, 0)
dt = 1×21 datetime array
01-Jan-2000 01:00:00 01-Jan-2001 01:00:00 01-Jan-2002 01:00:00 01-Jan-2003 01:00:00 01-Jan-2004 01:00:00 01-Jan-2005 01:00:00 01-Jan-2006 01:00:00 01-Jan-2007 01:00:00 01-Jan-2008 01:00:00 01-Jan-2009 01:00:00 01-Jan-2010 01:00:00 01-Jan-2011 01:00:00 01-Jan-2012 01:00:00 01-Jan-2013 01:00:00 01-Jan-2014 01:00:00 01-Jan-2015 01:00:00 01-Jan-2016 01:00:00 01-Jan-2017 01:00:00 01-Jan-2018 01:00:00 01-Jan-2019 01:00:00 01-Jan-2020 01:00:00
and so on and so forth?
Ross O'Connell
Ross O'Connell 2021년 3월 11일
Hi Steven,
Yes this is exactly how I want to add the data to the 'bins'.
I should have clarified further, the data is actually NetCDF, so the array for my variable is 21x11x175296 (so latitudexlongitudextime) and my time array is just 1 x 175296.
I found the following code from a previous query that I think was carrying out the same thing, but When I try to compute Y I am getting the following error:
Error using splitapply (line 99)
The data variables must have the same number of rows as the vector of group numbers. The group number vector has
175296 row(s), and data variable 1 has 21 row(s).
(https://uk.mathworks.com/matlabcentral/answers/506409-average-values-from-timeseries):
Day = day(Date,'dayofyear');
Hour = hour(UTtime);
[G,dayID,hourID]=findgroups(Day,Hour); % Added 3rd output
Y = splitapply(@mean,Temperature,G);

댓글을 달려면 로그인하십시오.

답변 (2개)

Star Strider
Star Strider 2021년 3월 10일
See if the groupsummary function will do what you want. The retime function is also an option.

Sargondjani
Sargondjani 2021년 3월 10일
Its not exactly clear over which values you want to calculate the mean, but have a look at this function, that can calculate moving averages:
https://uk.mathworks.com/help/matlab/ref/movmean.html

카테고리

Help CenterFile Exchange에서 Tables에 대해 자세히 알아보기

태그

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by