我在矩阵中有一列字符串
X = ['apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)'; 'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)' ]
我需要创建另一列矩阵来重新定义X的内容。
例如,我希望MATLAB将'apple'重新定义为1,将'orange'重新定义为2.所以最后我会期待这样的事情:
[1; 1; 1; 2; 2; 2]
但是,当我读取字符串列时,MATLAB无法读取字符串:
theMatrix = xlsread(myFile.xls);
for i = numTotalTrials;
X = theMatrix(i,2)
> X = Nan
此外,我正在使用strfind
重新定义列:
t = strfind(X,'a');
if t == 1
newColumn = 1
else
newColumn = 2
end
MATLAB是否以这种方式工作?谢谢!
答案 0 :(得分:1)
使用正则表达式的另一种解决方案:
%# note the use of cell-arrays
X = {'apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)';
'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)'};
%# match either apples or oranges
m = regexp(X, '^(apple|orange)', 'match', 'once');
%# which one was found
[~,loc] = ismember(m, {'apple','orange'})
结果:
>> loc
loc =
1
1
1
2
2
2
答案 1 :(得分:0)
不知道,如果这是你想要的,但是从
开始X = ['apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)';
'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)'];
我会定义一个输出向量result
,循环输入并只查找
使用strfind
的所需字符串,可能看起来像
result = zeros(size(X, 1), 1);
for row = 1 : size(X, 1)
if ~isempty(strfind(X(row,:), 'apple'))
result(row) = 1;
elseif ~isempty(strfind(X(row,:), 'orange'))
result(row) = 2;
end
end
这将返回
result = [1; 1; 1; 2; 2; 2];