0

我在矩阵中有一列字符串

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 是否以这种方式工作?谢谢!

4

2 回答 2

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
于 2012-08-01T18:21:13.437 回答
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];
于 2012-08-01T18:13:29.137 回答