Azzera filtri
Azzera filtri

Finding the average of every nth row but n is not fixed.

2 visualizzazioni (ultimi 30 giorni)
Hello,
Consider a nx2 matrix M with
M= [
1 10
1 11
1 20
2 4
2 9
2 8
2 7
.
.
.
];
How to find the average of the second column when the first column change values, i.e. "1 rows" have 3
values while "2 rows" have 4, etc. so we need the average of the 3 first values, then the next four, etc.
Thank you.

Risposta accettata

Stephen23
Stephen23 il 23 Lug 2019
Modificato: Stephen23 il 23 Lug 2019
>> M = [1,10;1,11;1,20;2,4;2,9;2,8;2,8];
Method one: accumarray:
>> V = accumarray(M(:,1),M(:,2),[],@mean)
V =
13.667
7.25
Method two: splitapply:
>> V = splitapply(@mean,M(:,2),M(:,1))
V =
13.667
7.25
And if you want those values back in the matrix:
>> M(:,3) = V(M(:,1))
M =
1 10 13.667
1 11 13.667
1 20 13.667
2 4 7.25
2 9 7.25
2 8 7.25
2 8 7.25
  2 Commenti
pavlos
pavlos il 23 Lug 2019
@ Stephen
Thank you, it works perfectly.
But I didn`t mentioned in my question that the values of the 1st column are repeated.
Actually, the 1st column corresponds to hours in a day within a month so, 0,1,..,23 are repeated:
0 0 1. . .23 23 23 1st day
0 1 1...23 2nd day
etc.
So each day has different number of hourly values.
Pavlos
Stephen23
Stephen23 il 24 Lug 2019
@pavlos: Then to use this method you will have to generate a unique index for each group that you want to average. You could use findgroups or discretize or the third output from unique (possibly with the 'rows' option) or something similar.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by