Borrar filtros
Borrar filtros

How to group data points

4 visualizaciones (últimos 30 días)
Max Bernstein
Max Bernstein el 7 de Ag. de 2015
Comentada: Max Bernstein el 7 de Ag. de 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 comentarios
Azzi Abdelmalek
Azzi Abdelmalek el 7 de Ag. de 2015
Can you post the expected result for this case?
Max Bernstein
Max Bernstein el 7 de Ag. de 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]

Iniciar sesión para comentar.

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (3)

Matt J
Matt J el 7 de Ag. de 2015
Editada: Matt J el 7 de Ag. de 2015
Or this,
edges=120:5:170;
[~,~,bin] = histcounts(X,edges);
X=edges(bin)

Azzi Abdelmalek
Azzi Abdelmalek el 7 de Ag. de 2015
Editada: Azzi Abdelmalek el 7 de Ag. de 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 el 7 de Ag. de 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 comentario
Prabakar kg
Prabakar kg el 7 de Ag. de 2015
Below was the result
avg =
129.8950
132.7500
136.7333
143.2000
146.6250
150.4333

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by