필터 지우기
필터 지우기

remove row with matching string

조회 수: 14 (최근 30일)
Trader
Trader 2012년 4월 5일
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
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개)

Jan
Jan 2012년 4월 5일
array(strcmp(array(:, 4), 'waiting'), :) = [];

Richard Brown
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
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
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 CenterFile Exchange에서 Structures에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by