我有一个单元格数组,表示为
raw = {100 3.2 38 1;
100 3.7 38 1;
100 'NaN' 'NaN' 1;
100 3.8 38 [];
'NaN' 'NaN' 'NaN' 'NaN';
'NaN' 'NaN' 'NaN' [];
100 3.8 38 1};
如何删除至少包含一个'NaN'字符串和空单元格[]的行?因此,在这种情况下,我想从上述单元阵列中删除第3、4、5和6行。预先感谢!
答案 0 :(得分:0)
在您的细胞数组中,值NaN被定义为字符串,而不是“特殊”值NaN
在这种情况下,可以使用函数isempty
和isfloat
来识别单元数组的哪些元素为空或为float类型:
% Remove rows with empty cells
idx=any(cell2mat(cellfun(@isempty,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
% Remove rows with 'NaN'
idx=all(cell2mat(cellfun(@isfloat,raw,'UniformOutput',false)),2)
raw(~idx,:)=[]
在第一步中,您将使用函数isempty
查找空单元,因为输入是一个单元数组,因此必须使用cellfun
将functino应用于单元数组的所有元素。
isempty
返回一个0
和1
的单元格数组,其中1
标识一个空单元格,因此在将其转换为数组后(带有functino {{1 }}),您可以使用函数cell2mat
来识别具有空单元格的roww的索引。
在第二步中,采用类似的方法,您可以使用函数“ isfloat”来标识包含浮点值的行。
如果您将细胞数组中的any
定义为“值”而不是字符串,则可以使用相同的方法:
NaN
答案 1 :(得分:0)
要查找运行“ NaN”的行:
idxNan = any(cellfun(@(x) isequal(x,'NaN'),raw),2);
同样,要查找哪些行具有空单元格,请运行:
idxEmpty = any(cellfun(@(x) isempty(x),raw),2);
然后,您可以使用“或”省略不需要的行
raw(idxNan | idxEmpty,:) = [];
如果您的意思是将|
替换为&