Select groups of data with a specific size

1 Ansicht (letzte 30 Tage)
Maria Granell Ruiz
Maria Granell Ruiz am 18 Mär. 2019
Kommentiert: Maria Granell Ruiz am 18 Mär. 2019
Dear all,
Imagine you have a matrix with three colums, the first one is a grouping variable and the other two are coordinates (xy).
The grouping variable looks like this
A = [1 1 1 1 2 2 2 3 3 3 3]';
In this way i have four coordinates in the group 1, three coordinates in the group 2 and four in the group 3. I would like to exclude the groups that do not have 4 data points, i.e., more or less than 4 (in this case group 2).

Akzeptierte Antwort

Guillaume
Guillaume am 18 Mär. 2019
Simply build the histogram of your groups (with histcounts or accumarray) and select the groups you want to keep with ismember:
demodata = [[1 1 1 1 2 2 2 3 3 3 3]', randi(100, 11, 2)]
[group, ~, groupid] = unique(demodata(:, 1));
groupcount = accumarray(groupid, 1); %histogram of groups
keptdata = demodata(ismember(demodata(:, 1), group(groupcount == 4)), :)

Weitere Antworten (1)

KSSV
KSSV am 18 Mär. 2019
Let x,y be your data points
A = [1 1 1 1 2 2 2 3 3 3 3]';
for i = 1:max(X)
idx = A==i ;
if nnz(idx)<3
plot(x(idx),y(idx),'.')
end
end
  1 Kommentar
Maria Granell Ruiz
Maria Granell Ruiz am 18 Mär. 2019
Thank you for you quick answer!
But when i run your code it creates a logical vector idx that "selects" group 3, so not what i want. I would like to select the groups with four entries, no more or less.
you can use this imaginary coordinates:
xy = [1,2;3,4;4,5;5,6;2,3;4,5;6,7;7,8;3,4;8,3;4,9];

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by