我有一个矩阵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细胞基质。
欢迎任何建议!
答案 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, : );