过滤 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);

这里供您参考:https://www.mathworks.com/matlabcentral/answers/339274-how-to-filter-data-from-table-using-multiple-strings