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.
中访问数据的不同方式的更多信息
让我们假设我们有以下 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.