Select groups of data with a specific size

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).

 Accepted Answer

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)), :)

More Answers (1)

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 Comment

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];

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!