删除整行并合并矩阵中的下一行

时间:2012-08-08 00:13:47

标签: matlab matrix delete-row cell-array

我有一个矩阵A =

'30'  'X' '@NA'
'15'  'Y' [231.001] 
'00'  'Y' [21.110]
'20'  'W' '@NA'
'55'  'X' [9.001]
'10'  'X' [11.211]


>>whos A
  Name        Size              Bytes  Class    Attributes

  aaa         6x3               226    cell     

如果第1列中的“10”,“15”,“20”......“55”以外的任何内容,或者任何“@”,我怎么能得到一个删除矩阵A的整行的新矩阵B.第3列中的NA',并且合并下一个合格的行。

以A为例,第1行和第4行应该删除,因为第3列中有'@NA'。第3行也应该删除,因为第1列中有'00'。

矩阵B应该,

>>B

B = 
    '15'  'Y' [231.001] 
    '55'  'X' [9.001]
    '10'  'X' [11.211]

B是3 * 3细胞基质。

欢迎任何建议!

2 个答案:

答案 0 :(得分:2)

@paddy的答案略有不同:

idx = ismember(A(:,1), num2str((10:5:55)')) & ~strcmp(A(:,3),'@NA');
B = A(idx,:);

答案 1 :(得分:1)

在您的示例中,您没有通过“合并下一个合格的行”来表达您的意思。您所做的只是选择在一个或另一个标准上失败的行,并删除它们。如果这实际上是你想做的事情,那么这样的事情就可以了:

validnums = arrayfun( @num2str, 10:5:55, 'uni', 0 );
column1valid = ismember( A(:,1), validnums );
column3valid = cellfun( @isnumeric, A(:,3) )
B = A( column1valid & column3valid, : );