How to group data points

6 views (last 30 days)
Max Bernstein
Max Bernstein on 7 Aug 2015
Commented: Max Bernstein on 7 Aug 2015
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 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 7 Aug 2015
Can you post the expected result for this case?
Max Bernstein
Max Bernstein on 7 Aug 2015
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]

Sign in to comment.

Accepted Answer

Matt J
Matt J on 7 Aug 2015
X=floor(X/5)*5
  1 Comment
Max Bernstein
Max Bernstein on 7 Aug 2015
Thank you Matt, this was an elegant/simple solution that I would've never thought off!

Sign in to comment.

More Answers (3)

Matt J
Matt J on 7 Aug 2015
Edited: Matt J on 7 Aug 2015
Or this,
edges=120:5:170;
[~,~,bin] = histcounts(X,edges);
X=edges(bin)

Azzi Abdelmalek
Azzi Abdelmalek on 7 Aug 2015
Edited: Azzi Abdelmalek on 7 Aug 2015
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 on 7 Aug 2015
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 Comment
Prabakar kg
Prabakar kg on 7 Aug 2015
Below was the result
avg =
129.8950
132.7500
136.7333
143.2000
146.6250
150.4333

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!