4

我有这个单元格数组:

levelx=
      'GO:0016787'    'GO:0006412'    'GO:0030533'
      'GO:0008150'    'GO:0006412'    'GO:0030533'
      'GO:0006810'    'GO:0006412'    'GO:0030533'
      'GO:0016787'    'GO:0006412'    'GO:0030533'
      'GO:0008150'    'GO:0006412'    'GO:0030533'
      'GO:0006810'    'GO:0006412'    'GO:0030533'
      'GO:0016787'    'GO:0006412'    'GO:0030533'
      'GO:0008150'    'GO:0006412'    'GO:0030533'
      'GO:0006810'    'GO:0006412'    'GO:0030533'
      'GO:0016787'    'GO:0006412'    'GO:0030533'

我需要删除重复的行,但不更改整行的顺序...请注意,我使用代码查找唯一行,但它更改了行的顺序:

[~,idx]=unique(cell2mat(levelx),'rows');
unique_levelx =  levelx(idx,:);
4

2 回答 2

4

尝试

unique(levelx,'rows','stable')

请注意,在此语句中,我假设这levelx是一个数组,因为这就是我设置您的测试数据的方式。

于 2012-12-17T10:03:32.923 回答
0

我有一个黑客!

for li=1:size(levelx,1)
    fn = regexprep( [levelx{li,:}], ':', '' );
    s.(fn) = 1;
end
levelx = {};
fn = fieldnames( s );
for li=1:numel(fn)
    t = regexp( rexexprep( fn{li}, 'GO', 'GO:' ), '(GO:\d+)', 'tokens' );
    levelx(li, 1:3 ) = cellfun( @(x) x{1}, t, 'uni', false );
end
于 2012-12-17T10:08:10.900 回答