How to group data points

조회 수: 3 (최근 30일)
Max Bernstein
Max Bernstein 2015년 8월 7일
댓글: Max Bernstein 2015년 8월 7일
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
Azzi Abdelmalek
Azzi Abdelmalek 2015년 8월 7일
Can you post the expected result for this case?
Max Bernstein
Max Bernstein 2015년 8월 7일
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]

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2015년 8월 7일
  댓글 수: 1
Max Bernstein
Max Bernstein 2015년 8월 7일
Thank you Matt, this was an elegant/simple solution that I would've never thought off!

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Matt J
Matt J 2015년 8월 7일
편집: Matt J 2015년 8월 7일
Or this,
edges=120:5:170;
[~,~,bin] = histcounts(X,edges);
X=edges(bin)

Azzi Abdelmalek
Azzi Abdelmalek 2015년 8월 7일
편집: Azzi Abdelmalek 2015년 8월 7일
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 2015년 8월 7일
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
Prabakar kg
Prabakar kg 2015년 8월 7일
Below was the result
avg =
129.8950
132.7500
136.7333
143.2000
146.6250
150.4333

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Distribution Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by