过滤 Matlab 表中的单词(如 Excel)
Filter on words in Matlab tables (as in Excel)
在 Excel 中,您可以使用 "filter" 函数在您的列中查找某些词。我想在整个 table.
中在 Matlab 中执行此操作
以Matlab例子-table "patients.dat"为例;我的第一个想法是使用:
patients.Gender=={'Female'}
这是行不通的。
strcmp(patients.Gender,{'Female'})
仅在一栏中有效 ("Gender")。
我的问题:我有一个 table 用不同的词说 'A','B','bananas','apples',.... 展开在 table 的列中以任意方式。我只想要包含 'A' 和 'B'.
的行
很奇怪我没有在 matlab "help" 中找到它,因为它看起来很基础。我查看了 stackedO 但也没有找到答案。
一个table
在Matlab中可以看作是一个扩展的cell array
。例如,它还允许命名列。
但是在您的情况下,您想要搜索整个 cell array
,而不关心 table
的任何额外功能。因此将其转换为 table2cell
.
然后你想搜索某些词。您可以使用 regexp
但在您提到的示例中 strcmp
也足够了。两者都在 cell arrays
.
上立即工作
最后你只需要 find
逻辑搜索矩阵的行。
这里的例子让你得到来自 Matlab 示例数据集 'Male' 和 'Excellent' 条件下的所有患者的行:
patients = readtable('patients.dat');
patients_as_cellarray = table2cell(patients);
rows_male = any(strcmp(patients_as_cellarray, 'Male'), 2); % is 'Male' on any column for a specific row
rows_excellent = any(strcmp(patients_as_cellarray, 'Excellent'), 2); % is 'Excellent' on any column for a specific row
rows = rows_male & rows_excellent; % logical combination
patients(rows, :)
确实只打印出状况良好的男性患者。
这里有一个更简单、更优雅的语法:
matches = ((patients.Gender =='Female') & (patients.Age > 26));
subtable_of_matches = patients(matches,:);
% alternatively, you can select only the columns you want to appear,
% and their order, in the new subtable.
subtable_of_matches = patients(matches,{'Name','Age','Special_Data'});
请注意,在此示例中,您需要确保 patients.Gender 是分类类型。您可以使用 categorical(variable)
将变量转换为分类变量,然后将其重新分配给 table 变量,如下所示:
patients.Gender = categorical(patiens.Gender);
在 Excel 中,您可以使用 "filter" 函数在您的列中查找某些词。我想在整个 table.
中在 Matlab 中执行此操作以Matlab例子-table "patients.dat"为例;我的第一个想法是使用:
patients.Gender=={'Female'}
这是行不通的。
strcmp(patients.Gender,{'Female'})
仅在一栏中有效 ("Gender")。
我的问题:我有一个 table 用不同的词说 'A','B','bananas','apples',.... 展开在 table 的列中以任意方式。我只想要包含 'A' 和 'B'.
的行很奇怪我没有在 matlab "help" 中找到它,因为它看起来很基础。我查看了 stackedO 但也没有找到答案。
一个table
在Matlab中可以看作是一个扩展的cell array
。例如,它还允许命名列。
但是在您的情况下,您想要搜索整个 cell array
,而不关心 table
的任何额外功能。因此将其转换为 table2cell
.
然后你想搜索某些词。您可以使用 regexp
但在您提到的示例中 strcmp
也足够了。两者都在 cell arrays
.
最后你只需要 find
逻辑搜索矩阵的行。
这里的例子让你得到来自 Matlab 示例数据集 'Male' 和 'Excellent' 条件下的所有患者的行:
patients = readtable('patients.dat');
patients_as_cellarray = table2cell(patients);
rows_male = any(strcmp(patients_as_cellarray, 'Male'), 2); % is 'Male' on any column for a specific row
rows_excellent = any(strcmp(patients_as_cellarray, 'Excellent'), 2); % is 'Excellent' on any column for a specific row
rows = rows_male & rows_excellent; % logical combination
patients(rows, :)
确实只打印出状况良好的男性患者。
这里有一个更简单、更优雅的语法:
matches = ((patients.Gender =='Female') & (patients.Age > 26));
subtable_of_matches = patients(matches,:);
% alternatively, you can select only the columns you want to appear,
% and their order, in the new subtable.
subtable_of_matches = patients(matches,{'Name','Age','Special_Data'});
请注意,在此示例中,您需要确保 patients.Gender 是分类类型。您可以使用 categorical(variable)
将变量转换为分类变量,然后将其重新分配给 table 变量,如下所示:
patients.Gender = categorical(patiens.Gender);