过滤Matlab表中的部分单词

时间:2016-02-08 22:58:48

标签: matlab

与Excel类似,我需要了解如何过滤掉不包含某个字符串的表格行。

例如,我只需要包含字母“MX”的行。在工作表内,有一些行包含ZMX01,MX002和US001等字符串。我想要前两行。

这似乎是一个简单的问题,所以我很惊讶我找不到任何帮助!

类似于问题Filter on words in Matlab tables (as in Excel)

1 个答案:

答案 0 :(得分:1)

您可能在MATLAB中找不到关于表格的大量信息,因为它们是在版本R2013a中引入的,很久以前它不是 。那么,关于你的问题:让我们先创建一个样本表:

% Create a sample table
col1 = {'ZMX01'; 'MX002'; 'US001'};
col2 = {5;7;3};
T = table(col1, col2);

T = 
     col1      col2
    _______    ____

    'ZMX01'    [5] 
    'MX002'    [7] 
    'US001'    [3] 

现在,MATLAB提供rowfun函数将任何函数应用于表中的每一行。默认情况下,您调用的函数必须能够处理表的所有列。 要仅将rowfun应用于一列,您可以使用'InputVariables'参数,该参数允许您指定列的编号(例如,第二列的2)或者名称列(例如'myColumnName')。 然后,您可以将'OutputFormat'设置为'uniform'以获取数组而不是新表作为输出。

在您的情况下,您需要在'col1'列上使用strfindstrfind的返回值是空数组(如果未找到'MX'),或者是找到'MX'的所有索引的数组。

% Apply rowfun
idx = rowfun(@(x)strfind(x,'MX'), T, 'InputVariables', 'col1', 'OutputFormat', 'uniform');

这个输出将是

idx = 
    [2]
    [1]
    []

即。 3-by-1 单元格数组,对于'US001'为空,并且包含其他两个输入的正值。要使用此数据创建表的子集,我们可以执行以下操作:

% Create logical array, which is true for all rows to keep.
idx = ~cellfun(@isempty, idx);

% Save these rows and all columns of the table into a new table
R = T(idx,:);

最后,我们得到了结果表R

R = 
     col1      col2
    _______    ____

    'ZMX01'    [5] 
    'MX002'    [7]