2

在 Excel 中,您可以使用“过滤器”功能在列中查找某些单词。我想在整个表格的 Matlab 中执行此操作。

以 Matlab 示例表“patients.dat”为例;我的第一个想法是使用:

patients.Gender=={'Female'}

这是行不通的。

strcmp(patients.Gender,{'Female'})

仅在一列(“性别”)中工作。

我的问题:我有一张桌子,上面有不同的词,比如'A'、'B'、'bananas'、'apples'、....以任意方式分布在表格的列中。我只想要包含“A”和“B”的行。

奇怪的是,我在 matlab 的“帮助”中没有找到这个,因为它看起来很基础。我查看了stackedO,但也没有找到答案。

4

2 回答 2

1

Matlab 中的 Atable可以看作是扩展的cell array. 例如,它还允许命名列。

但是,在您的情况下,您想要整体搜索cell array并且不关心 a 的任何额外功能table。因此将其转换为table2cell.

然后你想搜索某些词。您可以使用 aregexp但在您提到的示例中strcmp也足够了。两者都立即工作cell arrays

最后,您只需要find逻辑搜索矩阵的行。

下面的示例从 Matlab 示例数据集中获取所有“男性”和“优秀”条件下的患者的行:

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, :)

这确实只打印出状况良好的男性患者。

于 2015-02-12T14:37:32.533 回答
1

这是一个更简单、更优雅的语法:

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)将变量转换为分类变量,并将其重新分配给表变量,如下所示:

patients.Gender = categorical(patiens.Gender);

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

于 2017-08-11T12:42:18.893 回答