我们假设我们有下表mytable
:
Name id Factor Correct
___________________________________________ ________ _________ ____________
'Maria' '7324' 'x' 'Yes'
'Lina' '7827' 'x' 'Yes'
'Jack' '7831' '' 'No'
'Van' '7842a' 'x' 'No'
'Julia' '7842c' '' 'Yes'
我想从mytable
中选择所有行,其中因子=' x'和正确='是'并将它们分配到一个新表中。对于每列的类(例如,'Name'
列),我们有:
class(mytable.Name) = cell
我试过这段代码:
newtable = mytable((mytable.Correct == 'Yes') & (mytable.Factor == 'x'))
得到了错误:
Undefined operator '==' for input arguments of type 'cell'
我尝试了第二种方法:
newtable = mytable((cell2mat(mytable.Correct) == 'Yes') & (cell2mat(mytable.Factor) == 'x'))
这一次出现了错误:
Error using cat
Dimensions of matrices being concatenated are not consistent.
这是有道理的,因为'是'与“No”相比,它的大小不同。我想重新分配“正确的”'列' Y'和' N'但是,这不是我真正想要的。有什么建议吗?
答案 0 :(得分:2)
由于您的表包含每个单元格中的字符数组,因此您可以与strcmp
进行比较以提取所需的行:
newtable = mytable(strcmp(mytable.Correct, 'Yes') & strcmp(mytable.Factor, 'x'), :);
产生以下结果:
newtable =
Name id Factor Correct
_______ ______ ______ _______
'Maria' '7324' 'x' 'Yes'
'Lina' '7827' 'x' 'Yes'
请注意,我使用比较结果作为行索引,然后使用:
作为列索引来选择所有列。您可以阅读this documentation,了解有关访问表格中数据的不同方法的更多信息。