How to delete duplicate values in a column

2 visualizaciones (últimos 30 días)
Zhan
Zhan el 10 de Dic. de 2016
Comentada: Image Analyst el 11 de Dic. de 2016
Matrix A is as follows:
A = [10023 10024 10025 10026 10027
1 1 1 1 1
1 1 1 1 1
1 1 2 1 1
2 3 2 5 1
2 3 2 5 2
4 3 4 5 1
4 3 4 6 1
1 3 4 6 1
1 1 1 1 1];
I want to remove the duplicate number in each column and produce the new matrix B like following:
B = [10023 10024 10025 10026 10027
1 1 1 1 1
2 3 2 5 2
4 1 4 6 1
1 0 1 1 0];
% The zero are added to ID numbers 10024 & 10027 in order to keep the consistenty of matrix B dimension.

Respuestas (1)

Image Analyst
Image Analyst el 10 de Dic. de 2016
This works:
A = [10023 10024 10025 10026 10027
1 1 1 1 1
1 1 1 1 1
1 1 2 1 1
2 3 2 5 1
2 3 2 5 2
4 3 4 5 1
4 3 4 6 1
1 3 4 6 1
1 1 1 1 1]
B = zeros(size(A));
for col = 1 : size(A, 2)
thisCol = A(:, col);
thisCol(diff(thisCol) == 0) = []; % Remove repeats.
B(1:length(thisCol), col) = thisCol;
end
% Trim off all zero rows
lastRow = find(all(B==0, 2), 1, 'first')-1;
B = B(1:lastRow, :)
  8 comentarios
Zhan
Zhan el 11 de Dic. de 2016
But if matrix A has over 100 columns? Can you please help me on the second part of my question?
Image Analyst
Image Analyst el 11 de Dic. de 2016
Well what did you try? Did you get anything like this:
A = [10023 10024 10025 10026 10027
1 1 1 1 1
1 1 1 1 1
1 1 2 1 1
2 3 2 5 1
2 3 2 5 2
4 3 4 5 1
4 3 4 6 1
1 3 4 6 1
1 1 1 1 1]
B = zeros(size(A));
for col = 1 : size(A, 2)
thisCol = A(:, col);
thisCol(diff(thisCol) == 0) = []; % Remove repeats.
B(1:length(thisCol), col) = thisCol;
end
% Trim off all zero rows
lastRow = find(all(B==0, 2), 1, 'first')-1;
B = B(1:lastRow, :)'
bRight = B(:, 2 : end)
B2 = unique(bRight, 'rows')
% Go down these rows finding out all the rows that have the row
for row = 1 : size(B2, 1)
thisRow = B2(row, :)
[ia, ib] = ismember(bRight, thisRow, 'rows')
extractedRows = B(ia, :)';
T{row} = extractedRows;
end
celldisp(T)
And you'll see:
T =
1×4 cell array
[5×1 double] [5×2 double] [5×1 double] [5×1 double]
T{1} =
10027
1
2
1
0
T{2} =
10023 10025
1 1
2 2
4 4
1 1
T{3} =
10024
1
3
1
0
T{4} =
10026
1
5
6
1

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing 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