hourly average of multiple column data

I have made a code to calculate hourly average of minute data. But it works only for single column. I have multiple column of concentration (BC) data. I want hourly average of multiple columns How can i get the desired answers. pls help.
day1bc=BC(find((date==1)));
day1hour=hour(date==1);
maxday1=max(day1hour);
for i=1:maxday1
HI= find(day1hour==i);
Bcv=day1bc(HI);
mean_BC_hourly1(i,:)=mean(Bcv);
end
The input datas are:
day hour BC BC;
1 1 10 20;
1 1 20 40;
1 2 30 60;
1 2 40 80;
1 3 50 100;
1 3 60 120;
1 3 70 140;
The answer expected:
BC BC;
15 30;
35 70;
60 120;

 Réponse acceptée

Star Strider
Star Strider le 12 Mai 2016
Use accumarray for the hours, although you would have to loop over the days:
% day hour BC BC
Mtx = [ 1 1 10 20;
1 1 20 40;
1 2 30 60;
1 2 40 80;
1 3 50 100;
1 3 60 120;
1 3 70 140;];
% ‘for’ % LOOP OVER DAYS
out(:,1) = accumarray(Mtx(:,2), Mtx(:,3), [], @mean);
out(:,2) = accumarray(Mtx(:,2), Mtx(:,4), [], @mean);
% ‘end’ % LOOP OVER DAYS
In the loop over days, replace the ‘:’ in the ‘out’ array reference with the day number.

4 commentaires

navan
navan le 12 Mai 2016
Modifié(e) : navan le 12 Mai 2016
Thanks star strider . But the day looping is not working. I have now two days data. But it is not fetching the proper result. kindly help. now the data set is
day hour BC BC; 1 1 10 60; 1 1 10 60; 1 2 20 80; 1 2 20 80; 1 3 30 100; 1 3 30 100; 1 3 30 100; 2 1 40 120; 2 1 40 120; 2 1 40 120; 2 2 50 140; 2 2 50 140; 2 2 50 140; 2 2 50 140; 2 2 50 140
I modified the code as below:But could not resolve. Please help
day=Mtx(:,1);
for day=1:2 % LOOP OVER DAYS
A(day,1) = accumarray(Mtx(:,2), Mtx(:,3), [], @mean);
A(day,2) = accumarray(Mtx(:,2), Mtx(:,4), [], @mean);
end
This works for the day loops. Note that the first three rows are for day #1 and the last two rows are for day #2. I added a ‘time’ array to keep track of them if you need to do that:
Mtx = [ 1 1 10 60;
1 1 10 60;
1 2 20 80;
1 2 20 80;
1 3 30 100;
1 3 30 100;
1 3 30 100;
2 1 40 120;
2 1 40 120;
2 1 40 120;
2 2 50 140;
2 2 50 140;
2 2 50 140;
2 2 50 140;
2 2 50 140];
dv = unique(Mtx(:,1)); % Unique Days
for k1 = dv(:)'
avg{k1,1} = accumarray(Mtx(Mtx(:,1)==k1,2), Mtx(Mtx(:,1)==k1,3), [], @mean); % BC1 Mean
avg{k1,2} = accumarray(Mtx(Mtx(:,1)==k1,2), Mtx(Mtx(:,1)==k1,4), [], @mean); % BC2 Mean
hr = accumarray(Mtx(Mtx(:,1)==k1,2), Mtx(Mtx(:,1)==k1,2), [], @mean); % Hours
time{k1} = [k1*ones(size(hr)) hr]; % [Days Hours]
end
Result = [cell2mat(time') cell2mat(avg)]
Result =
1 1 10 60
1 2 20 80
1 3 30 100
2 1 40 120
2 2 50 140
The ‘Result’ array concatenates the ‘time’ and ‘avg’ arrays (that I renamed to make them more meaningful).
navan
navan le 13 Mai 2016
Dear Star Strider Thanks again. It helped me so much. Thank you for your precious time ,effort and great help
Star Strider
Star Strider le 13 Mai 2016
As always, my pleasure!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by