我有一个混合的单元格数组与字符串和整数。例如:如何在混合单元格数组中找到某个字符串并将其替换为整数?
myData = {'blank' 'a' 'b' 'c'; ...
'sample1' 5 6 'NF'; ...
'sample2' 'NF' 54 'NF'};
我想这个单元阵列中去,找到'NF'
所有实例,并把它变成一个0
。
我有一个混合的单元格数组与字符串和整数。例如:如何在混合单元格数组中找到某个字符串并将其替换为整数?
myData = {'blank' 'a' 'b' 'c'; ...
'sample1' 5 6 'NF'; ...
'sample2' 'NF' 54 'NF'};
我想这个单元阵列中去,找到'NF'
所有实例,并把它变成一个0
。
myData(cellfun(@(c) isequal(c, 'NF'), myData)) = {0};
或者你可以使用strcmp
为Jon suggests:
myData(strcmp(myData, 'NF')) = {0};
然而,应该指出的是,这两种解决方案都没有恰好为等同于每种情况。来自the documentation for strcmp
:
strcmp
函数用于比较文本。如果用于不支持的数据类型,则strcmp
始终返回0
。
因此,如果任一输入参数是比其他数据类型的字符向量/阵列,字符向量,或串阵列的单元阵列,strcmp
将返回false
。相反,isequal
在确定它们是否相等时会忽略输入参数的数据类型。例如,数字矢量[78 70]
是对应的ASCII码字符矢量'NF'
的,所以你从strcmp
和isequal
结果如下:
>> strcmp([78 70], 'NF')
ans =
logical
0 % No match
>> isequal([78 70], 'NF')
ans =
logical
1 % Match
换句话说,strcmp
比较不同数据的平等时要严格得多,类型,而isequal
则更为宽松,允许不同数据类型的输入在其基础数据实际上相同时被认为是相等的。在选择解决方案之前,您应该考虑需要哪种行为。
for循环双可以解决这个问题:
for j=1:size(myData,1)
for k=1:size(myData,2)
if strcmp(myData{j,k},'NF')
myData{j,k}=0;
end
end
end
其中size(myData,1)
发现的行数和size(myData,2)
找到你的混合单元阵列的列的数目。
使用strcmp
myData(strcmp(myData,'NF'))={0}
天哪简单的解决方案非常感谢你。这是一个这样简单的解决方案! – Snek22