我有一個混合的單元格數組與字符串和整數。例如:如何在混合單元格數組中找到某個字符串並將其替換爲整數?
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