hourly average of data from 30mins past the hour

1 visualización (últimos 30 días)
Maitiumc
Maitiumc el 2 de Dic. de 2016
Editada: Maitiumc el 20 de Mzo. de 2017
I'm working on some solar irradiance data, I have been able to get the hourly average using the following code:
DateNumber = timeStamp(:,1);
formatOut = 'dd mm yyyy HH:MM:SS';
str = datestr(DateNumber,formatOut);
%Creates coloum vectors corresponding to month, day and hour
%these are used to find the hourly average for each day of the month
%averages for irradiance, temperature and wind speed are calculated
Cell = cellstr(str);
[~,Mth,Day,Hr] = datevec(Cell, 'dd mm yyyy HH:MM:SS');
subs = [Mth Day Hr+1];
hrly_mean_ir = accumarray(subs, I,[], @mean); % hourly mean irradiance
hrly_mean_ws = accumarray(subs, Ws,[], @mean);
hrly_mean_temp = accumarray(subs, T, [], @mean);
The problem with this is when I plot it, for example the data for each day should peak around 12pm. But since the average for 1100 to 1200 (or 1200 to 1300 depending on the plot) the peak can be shifted slightly off the midday point.
What I need is the hour to 'start' at 30mins past the hour, eg for 12pm the average would be 1130 to 1230
I'm not too sure how I can get the hourly average in this format however.

Respuestas (1)

Alexandra Harkai
Alexandra Harkai el 2 de Dic. de 2016
You could avoid the date conversion back-and-forth business by sticking to DateNumber. Getting not only the hours but the minutes for those DateNumber values you can add an hour only on the ones where the minutes indicate they are at least 30mins past the hour, pushing them to the next 'bucket'.
DateNumber = timeStamp(:,1);
%Creates coloum vectors corresponding to month, day and hour
%these are used to find the hourly average for each day of the month
%averages for irradiance, temperature and wind speed are calculated
[~,Mth,Day,Hr,Mn] = datevec(DateNumber);
subs = [Mth Day Hr+Mn>=30];
hrly_mean_ir = accumarray(subs, I,[], @mean); % hourly mean irradiance
hrly_mean_ws = accumarray(subs, Ws,[], @mean);
hrly_mean_temp = accumarray(subs, T, [], @mean);
  1 comentario
Maitiumc
Maitiumc el 20 de Mzo. de 2017
Editada: Maitiumc el 20 de Mzo. de 2017
Sorry for the late response!
Running this will give me:
Error using accumarray
First input SUBS must contain positive integer subscripts.
Error in filename (line 46)
hrly_mean_ir = accumarray(subs, I,[], @mean);
And also looking at the hour values in subs, they seems to be either 1 or 0, not 1 through to 24

Iniciar sesión para comentar.

Categorías

Más información sobre Dates and Time en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by