根据两列中的条件从表中选择行

时间:2017-09-20 13:37:22

标签: matlab matlab-table

我们假设我们有下表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'但是,这不是我真正想要的。有什么建议吗?

1 个答案:

答案 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,了解有关访问表格中数据的不同方法的更多信息。