Delete rows when a value repeated less than 5 times
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Dinh-Vinh Vo
el 31 de Ag. de 2017
Editada: Karena Weduwen
el 19 de Mzo. de 2018
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.
0 comentarios
Respuesta aceptada
Sean de Wolski
el 31 de Ag. de 2017
Editada: Sean de Wolski
el 31 de Ag. de 2017
m = [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];
% Unique elements and locations in third column
[uv, ~, id] = unique(m(:,3));
% How many of each?
n = histcounts(id);
% Keep ones with more than 5.
m2 = m(ismember(m(:,3), uv(n>=5)),:)
2 comentarios
Karena Weduwen
el 19 de Mzo. de 2018
Editada: Karena Weduwen
el 19 de Mzo. de 2018
Hello Sean, your code works perfectly fine on a small testfile I use (190 rows).
But as soon as I add some more rows, the
n = histcounts(id);
part starts giving weird values. I cannot find the reason for that change.
Attached you find the two files:
working.txt code runs through without any trouble
not working.txt "n = histcounts(id);" gives strange output and the m2 stays empty.
Any suggestions on how the code could be adjusted to work on a bigger file?
since my file looks a little different (I am searching in the first column) here is the code I use:
if true
load working.txt
a = working(:,:);
[uv, ~, id] = unique(a(:,1));
n = histcounts(id);
m2 = a(ismember(a (:,1), uv(n==4)),:);
end
Más respuestas (1)
José-Luis
el 31 de Ag. de 2017
Editada: José-Luis
el 31 de Ag. de 2017
idx = unique(m(:,3));
count = accumarray(c.',(1:numel(c)).',[],@numel);
to_keep = ~ismember(m(:,3),idx(count < 5));
result = m(to_keep,:)
5 comentarios
José-Luis
el 31 de Ag. de 2017
No, the solution is not robust. You'd need to adjust the accumarray function.
Ver también
Categorías
Más información sobre Data Type Conversion en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!