Matlab中特定字符串的裁剪

Matlab中特定字符串的裁剪,matlab,Matlab,您好,我有一个数据表,它在Matlab中的值是Y,N,或U,称为data2 我想保留所有具有Y的内容,并删除所有内容 我使用strcmp查找N,并成功地删除了带有“N”的行。但是,我想去掉U和N。我试着在cmpstr中使用|表示or,但没有成功 rowIdx = strcmp('N' , data2{:, 1}); data2(rowIdx, :) = []; 即使使用|符号,也只能删除N。您可以分别搜索'N'和'U',然后对逻辑数组求和。由于第一列的元素不能同时是'N'和'U',因此您将得到

您好,我有一个数据表,它在Matlab中的值是
Y
N
,或
U
,称为data2

我想保留所有具有
Y
的内容,并删除所有内容

我使用strcmp查找
N
,并成功地删除了带有“N”的行。但是,我想去掉
U
N
。我试着在cmpstr中使用|表示or,但没有成功

rowIdx = strcmp('N' , data2{:, 1});
data2(rowIdx, :) = [];

即使使用
|
符号,也只能删除
N

您可以分别搜索
'N'
'U'
,然后对逻辑数组求和。由于第一列的元素不能同时是
'N'
'U'
,因此您将得到一个数组,其中包含
'N'
'U'
的行将具有
1
,否则为
0

因此,代码应该是:

rowIdx_N=strcmp('N',data2{,1});
rowIdx_=strcmp('U',data2{:,1});
rowIdx=rowIdx_N | rowIdx_;%在逻辑阵列上执行或操作
数据2(rowIdx,:)=[];

您可以使用正则表达式,只提取与指定模式匹配的行(
'y'
)。这有一个很大的优点,即它更通用,可以用于搜索任何模式。此外,不需要显式删除找到的匹配项

% test table, just for demo since you did not provide any data
t = {'u', 'Y', 'h', 'f'; 'f', 'h', 'h', 'e'; 'g', 'd', 'y', 'n'};
t = cell2table(t)

pattern = 'y'; % any regular expression
str = t{:, :};

found = regexp(str, pattern) % or regexpi() for case insensitivity

[r,c] = find(~cellfun(@isempty,found));
t(unique(r),:) % matching rows of table t

unique()
如果在一行中找到多个匹配项,则需要最后一行中的
,否则将导致输出中这一行多次出现。

当我尝试此操作时,他们说表行下标必须是包含实正整数的数字数组、逻辑数组、字符向量、字符串数组或字符向量的单元格数组。“@MoanaLisa I修复了问题
rowIdx
不是逻辑数组,它现在应该可以正常工作了!谢谢你的帮助@莫纳利萨很乐意帮忙。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。您能否进一步澄清[r,c]部分?这意味着什么?
r
是我的行变量,
c
是我的列变量
[r,c]=函数(…)
,其中
[r,c]
位于赋值的左侧意味着函数将返回2个值(
find()
)。另请参见,它捕获找到的
中不为空(=匹配模式)的所有单元格的行和列索引。或者检查具有多个输出的示例
函数。