MATLAB Answers

remove duplicated rows from a cell array ?

21 views (last 30 days)
chocho
chocho on 21 May 2017
Edited: Andrei Bobrov on 21 May 2017
Hi Friends, I have used this piece of code to remove duplicated pairs of rows from a cell array but it produces an error. Could anyone help me to fix it?
cell={' A',' B'; ' C',' D' ;'E','F'; ' B',' A'; ' C',' D'}
Desired_output={'A','B';'C','D';'E','F'}
I update the cell to make it more easy to understand.

  0 Comments

Sign in to comment.

Answers (2)

dpb
dpb on 21 May 2017
Sans the orientation (and not sure you can ensure the data are all symmetric to keep the square array?)
>> [u,ix,ib]=unique(c);
>> [n,idx]=histc(ib,1:length(u));
>> c(ix(n==1))
ans =
'BRCA1'
'ESF'
'NBR1'
'TTN'
>>
NB: Do NOT use 'cell' as variable name; that aliases the builtin cell function which, particularly when you're using cell array specifically could have very bad results. I just use c as a placeholder variable above instead; pick a meaningful but not conflicting name.

  0 Comments

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 21 May 2017
Edited: Andrei Bobrov on 21 May 2017
cell1 = {'ESF','BRCA1';'ELANE','SLPI';'NBR1','TTN';'SLPI','ELANE'};
[~,~,c] = unique(cell1);
[~,~,c1] = unique(sort(reshape(c,size(cell1)),2),'rows');
m = max(c1);
[n,~,ii] = histcounts(c1,[1:m,m + 1]);
out = cell1(n == 1,:);
add
cell1={'A','B'; 'C',' D' ;'E','F'; 'B','A'; 'C','D'};
[~,c] = unique(cell1);
[~,b] = unique(sort(reshape(c,size(cell1)),2),'rows');
out = cell1(b,:);

  3 Comments

chocho
chocho on 21 May 2017
thanks for your help!
I have tried your code and get this error:
Error using max
Not enough input arguments.
chocho
chocho on 21 May 2017
@Andrei Bobrov I post more easy example to make clear, plz check my question.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!