Hello,
I have a set of data that I would like to perform analysis on, and it's something like:
[150 151.1 149.6 150.2 146.1 145.6 144.1 144.9 145.2 139.9 140.6 138.9 135.4 135.1 134.9 135.9 135.2 129.9 129.89 130.6]
I would like to group the data to 150, 145, 140, etc... I have tried to manipulate it using rounding/ceiling, etc.. but I couldnt figure out how to group it correctly because it varies too much, and another problem is that the number of data points arent always the same. Once I can group it, I would like to find the average of the data for each set. Is there a way to do this?
Thanks for the help!

2 Kommentare

Azzi Abdelmalek
Azzi Abdelmalek am 7 Aug. 2015
Can you post the expected result for this case?
sure, it would be something like the following, with the second column being the average.
[150 150.2250
145 145.1800
140 139.8000
135 135.3000
130 130.3900]

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Matt J
Matt J am 7 Aug. 2015

0 Stimmen

X=floor(X/5)*5

1 Kommentar

Max Bernstein
Max Bernstein am 7 Aug. 2015
Thank you Matt, this was an elegant/simple solution that I would've never thought off!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Matt J
Matt J am 7 Aug. 2015
Bearbeitet: Matt J am 7 Aug. 2015

0 Stimmen

Or this,
edges=120:5:170;
[~,~,bin] = histcounts(X,edges);
X=edges(bin)
Azzi Abdelmalek
Azzi Abdelmalek am 7 Aug. 2015
Bearbeitet: Azzi Abdelmalek am 7 Aug. 2015

0 Stimmen

A=[150 151.1 149.6 150.2, 146.1 145.6 144.1 144.9 145.2, 139.9 140.6 138.9]
[a,b]=histc(A,[135:5:150 155])
out=accumarray(b',(1:numel(b))',[],@(x) {A(x)})
celldisp(out)
To get the mean of each group
outmean=accumarray(b',(1:numel(b))',[],@(x) {mean(A(x))})
Prabakar kg
Prabakar kg am 7 Aug. 2015

0 Stimmen

arr = [150 151.1 149.6 150.2 146.1 145.6 144.1 144.9 145.2 139.9 140.6 138.9 135.4 135.1 134.9 135.9 135.2 129.9 129.89 130.6];
HISTCOUNTS is used to group the data
[cnt, edges, bin] = histcounts(arr, 125:5:155);
ACCUMARRAY to calculate SUM on the grouped data
sum = accumarray(bin', arr');
Calculate the AVERAGE. Note that this could be done in the previous step. I separated these to improve readability
avg = sum./cnt';
Hope this helps.

1 Kommentar

Prabakar kg
Prabakar kg am 7 Aug. 2015
Below was the result
avg =
129.8950
132.7500
136.7333
143.2000
146.6250
150.4333

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by