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 に答える