与Excel类似,我需要了解如何过滤掉不包含某个字符串的表格行。
例如,我只需要包含字母“MX”的行。在工作表内,有一些行包含ZMX01,MX002和US001等字符串。我想要前两行。
这似乎是一个简单的问题,所以我很惊讶我找不到任何帮助!
答案 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'
列上使用strfind
。 strfind
的返回值是空数组(如果未找到'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]