how to compute monthly average values using for loop
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Valerio Gianforte
am 27 Apr. 2020
Bearbeitet: Olawale Ikuyajolu
am 28 Apr. 2020
Hi everyone,
I have 11 years of data, every day has 4 values and for each years I have 1460 data. Now, I have to compute the mean monthly value for each months of every year. I'm attacching the data and the code. Thank you.
format long g
folderData = 'D:\Valerio\data\An_Energy_ERA5_IPCC\IPCC_ERA5\ACCESS1.0';
filePattern = fullfile(folderData, '*.xlsx');
xlsFiles = dir(filePattern);
nFiles = length(xlsFiles);
%with for loop we open the file with the order that the files have in the folder
for ii = 1:nFiles
filename = fullfile(xlsFiles(ii).folder, xlsFiles(ii).name);
files{ii} = xlsread(filename);
end
IPCC = files(1);
ERA5 = files(2);
%"unique" command need to read one time the multiple same rows
IPCC_data = unique(IPCC{:,1},'rows');
ERA5_data = unique(ERA5{:,1},'rows');
%The strings below are used to take the common data between two files and
%they are take by the same dates
dt_IPCC = datetime([IPCC_data(:,1:3) IPCC_data(:,4)/1E4 repmat([0 0],size(IPCC_data,1),1)]);
dt_ERA5 = datetime([ERA5_data(:,1:4) repmat([0 0],size(ERA5_data,1),1)]);
[~,ia,ie] = intersect(dt_IPCC,dt_ERA5);
tt_IPCC_ERA5 = timetable(dt_IPCC(ia),IPCC_data(ia,5:end),ERA5_data(ie,5:end));
tt_IPCC_ERA5.Properties.VariableNames = {'IPCC','ERA5'};
% TR_95 = timerange('01-Jan-1985 00:00:00','01-Jan-1996 00:00:00');
% tt_95 = tt_IPCC_ERA5(TR_95,:);
start_yy = 1985;
end_yy = 1995;
range_yy = (start_yy:end_yy).';
r_yy = length(range_yy);
E_IPCC = cell(r_yy,1);
E_ERA5 = cell(r_yy,1);
for i = 1:r_yy
s1 = sprintf('01-Jan-%d 00:00:00',1984+i);
s2 = sprintf('01-Jan-%d 00:00:00',1985+i);
TR = timerange(s1,s2);
tt = tt_IPCC_ERA5(TR,:);
tt_IPCC = tt.IPCC;
tt_ERA5 = tt.ERA5;
E_IPCC{i} = tt_IPCC(:,2).*tt_IPCC(:,1).^2;
E_ERA5{i} = tt_ERA5(:,2).*tt_ERA5(:,1).^2;
end
I have to obtaine the mean monthly value of E_IPCC and E_ERA5.
0 Kommentare
Akzeptierte Antwort
Olawale Ikuyajolu
am 28 Apr. 2020
Bearbeitet: Olawale Ikuyajolu
am 28 Apr. 2020
%% first create an array with repeating values for all days in a month e.g. Jan =1 for day 1 to 31
a = datenum({'01-Jan-2003';'31-Dec-2003'}); %Satrt and end dates
Out2 = datevec(a(1):1:a(2)); %arrays of dates
aa2 = Out2(:,1:3); % save only yy-mm-dd
mm = aa2(:,2); % save only months
for i= 1:11
temp = E_IPCC{i,1}; % selecting each year in the cell
temp_daily = reshape(temp,[4,length(temp)/4])'; % separate the four daily values
temp_daily_mean = mean(temp_daily,2); % first compute daily mean
for j = 1:12
E_IPCC_monmean(j,i) = mean(temp_daily_mean(mm==j)); %monthly mean
end
end
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Sparse Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!