Delete rows when a value repeated less than 5 times
Show older comments
I have a matrix:
a b c
1 201 1
2 202 1
3 203 1
4 204 1
5 205 1
6 206 1
7 207 2
8 208 2
9 209 2
10 210 2
11 222 3
12 232 3
I would like to remove rows 7-12 which have a value in the last column (c) repeated less than 5 times. Any help is appreciated.
Accepted Answer
More Answers (1)
idx = unique(m(:,3));
count = accumarray(c.',(1:numel(c)).',[],@numel);
to_keep = ~ismember(m(:,3),idx(count < 5));
result = m(to_keep,:)
5 Comments
Dinh-Vinh Vo
on 31 Aug 2017
Edited: Dinh-Vinh Vo
on 31 Aug 2017
José-Luis
on 31 Aug 2017
My bad.
c = m(:,3);
idx = unique(c);
count = accumarray(c, (1:numel(c)).',[],@numel);
to_keep = ~ismember(c,idx(count < 5));
result = m(to_keep,:)
Dinh-Vinh Vo
on 31 Aug 2017
José-Luis
on 31 Aug 2017
No, the solution is not robust. You'd need to adjust the accumarray function.
Dinh-Vinh Vo
on 31 Aug 2017
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!