Select 行来自 table 基于两列中的条件

Select rows from a table based on conditions in two columns

让我们假设我们有以下 table mytable:

                     Name                            id         Factor       Correct
    ___________________________________________    ________    _________    ____________

    'Maria'                                        '7324'      'x'           'Yes'      
    'Lina'                                         '7827'      'x'           'Yes'      
    'Jack'                                         '7831'      ''            'No'      
    'Van'                                          '7842a'     'x'           'No'      
    'Julia'                                        '7842c'     ''            'Yes'   

我想 select 来自 mytable 的所有行,其中 Factor = 'x' AND Correct = 'Yes' 并将它们分配到新的 table 中。对于每列的 class(例如,'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.

这是有道理的,因为 'Yes' 与 'No' 相比大小不同。我正在考虑用 'Y' 和 'N' 重新分配 'Correct' 列。然而,这不是我真正想要的。有什么建议吗?

由于您的 table 在每个单元格中包含字符数组,您可以与 strcmp 进行比较以提取所需的行:

newtable = mytable(strcmp(mytable.Correct, 'Yes') & strcmp(mytable.Factor, 'x'), :);

产生以下结果:

newtable = 

     Name        id      Factor    Correct
    _______    ______    ______    _______

    'Maria'    '7324'    'x'       'Yes'  
    'Lina'     '7827'    'x'       'Yes'  

请注意,我使用比较结果作为行索引,然后使用 : as the column index to select all columns. You can read this documentation 获取有关在 table.

中访问数据的不同方式的更多信息