removing all rows with duplicate information in two columns

25 visualizaciones (últimos 30 días)
Hi there,
I have a large matrix with 5 columns. As an example ,imagine a=[1 2 3 4 5; 1 3 4 5 6; 1 2 3 5 5] is just a small sample of the larger matrix. I am trying to remove the rows where columns 1 and columns 5 match. So for my example matrix a, I would need to remove BOTH rows 1 and 3 since they have the same values in column 1 AND column 5. I know that the unique function can get me to the point where one of the rows is removed but I need both of them removed. I have been at this all day and am stumped (and it is probably a simple answer!)
Any help is much appreciated!

Respuesta aceptada

Star Strider
Star Strider el 23 de Feb. de 2020
Try this:
a=[1 2 3 4 5; 1 3 4 5 6; 1 2 3 5 5];
[~,~,idx] = unique(a(:,[1 5]),'rows');
tally = accumarray(idx,(1:numel(idx)).',[],@(x){idx(x)});
notsame = a(cellfun(@(x)numel(x)==1,tally),:)
producing:
notsame =
1 3 4 5 6
I also tried it on a larger version. It took a bit of time for me to prove that this works with the larger matrix.
  5 comentarios
Erika Wells
Erika Wells el 23 de Feb. de 2020
Thank you so much!! That works!! I struggled with it all night.
Very much appreciated.
Star Strider
Star Strider el 23 de Feb. de 2020
As always, my pleasure!
(I obviously struggled with it as well!)

Iniciar sesión para comentar.

Más respuestas (1)

Erika Wells
Erika Wells el 23 de Feb. de 2020
Here is what I get with this matrix
a=[ 1 13 1 2 4; 1 1 1 2 18; 1 21 1 2 21;
1 40 1 1 21;1 10 1 1 29;1 27 1 1 41;2 12 1 1 29; 2 16 1 2 29];
[~,~,idx] = unique(a(:,[1 5]),'rows');
tally = accumarray(idx,(1:numel(idx)).',[],@(x){idx(x )});
notsame = a(cellfun(@(x)numel(x)==1,tally ),:);
notsame=
1 13 1 2 4
1 1 1 2 18
1 40 1 1 21
1 10 1 1 29
But what I want is:
1 13 1 2 4
1 1 1 2 18
1 10 1 1 29
1 27 1 1 41

Categorías

Más información sobre Creating and Concatenating Matrices 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!

Translated by