remove row with matching string
18 次查看(过去 30 天)
显示 更早的评论
I'm trying to eliminate an entire row of data if a string is found in the cell array.
Sample array values:
myarray =
[ 16] '10/05/2011' '11:20' 'waiting' 'nopos' [ 10000]
[ 17] '10/05/2011' '11:25' 'open' 'long' [ 0]
[ 34] '10/05/2011' '12:50' 'open' 'short' [ 0]
so i'd like to have:
my array =
[ 17] '10/05/2011' '11:25' 'open' 'long' [ 0]
[ 34] '10/05/2011' '12:50' 'open' 'short' [ 0]
there can be several occurances in the array, I'm not looking to pop the top row...
you help is greatly appreciated
1 个评论
Image Analyst
2012-4-5
So which element in the cell array are you checking for the string? In column 4 or column 5, or something else.
回答(2 个)
Richard Brown
2012-4-5
If it can occur anywhere, use cellfun to test for equality:
[I, ~] = find(cellfun(@(s) isequal(s, 'waiting'), myarray));
myarray(I, :) = [];
otherwise, you can pull out the column of interest and use ismember
I = ismember(myarray(:, 4), 'waiting')
myarray(I, :) = [];
4 个评论
Richard Brown
2012-4-5
And yes, just checked - for a cell array vector of 100000 strings, on my computer strcmp takes 0.01 seconds, whereas ismember takes 0.03 :)
Jan
2012-4-5
0.02 seconds lost. But if you do this 10e6 times... :-)
I've overseen, that your FIND command operates on a matrix. Then the 2nd omitted output does matter, as you have written.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!