如何从单元格数组中删除重复的行对?

时间:2017-05-21 09:30:20

标签: matlab

昨天我发布了这个问题,但帮助我解决这个问题的朋友没有回复我,他写的行有错误。 任何其他人都可以帮助我;我试过自己,但没找到我想要的东西。  简单地说, 我想删除重复的行说:{'A','B'; 'B','A';'C','D'; '光盘'} 并且只保留一行如下:{'A','B';'C','D'}

示例:

'TPB''TP53'

'ELL''TP53'

'SIT1''GRB2'

'ROHA''BRCA1'

'TP53''ELL'

'ROHA''BRCA1'

期望的输出:

'TPB''TP53'

'ELL''TP53'

'SIT1''GRB2'

'ROHA''BRCA1'

https://drive.google.com/file/d/0B6u8fZadKIp2bEVCN1IxVDBBWG8/view

1 个答案:

答案 0 :(得分:1)

你想要独特的字符串数组。您可以对单元格条目使用unique来获取数值矩阵,然后在矩阵上使用unique(再次)和参数'rows'来获取唯一的行:

% input cell
C = {'TPB' 'TP53';
    'ELL' 'TP53';
    'SIT1' 'GRB2';
    'ROHA' 'BRCA1';
    'TP53' 'ELL';
    'ROHA' 'BRCA1'};
% get unique cell entries as a numeric array
[~, ~, num] = unique(C,'stable');
% sort columns to eliminate [a,b;b,a] situations
num = sort(reshape(num,size(C)),2);
% get unique rows indexes
[~,idx,~] = unique(num,'rows');
res = C(idx,:)

输出:

4×2 cell array

'TPB'     'TP53' 
'ELL'     'TP53' 
'SIT1'    'GRB2' 
'ROHA'    'BRCA1'