Delete the Whole Row and Merge The Next Row in a matrix
1 view (last 30 days)
Show older comments
I have a Matrix A =
'30' 'X' '@NA'
'15' 'Y' [231.001]
'00' 'Y' [21.110]
'20' 'W' '@NA'
'55' 'X' [9.001]
'10' 'X' [11.211]
>>whos A
Name Size Bytes Class Attributes
aaa 6x3 226 cell
How can I get a new matrix B that delete the whole row of Matrix A if there is anything other than '10','15','20'...'55' in Column 1, or any '@NA' in Column 3 , and MERGE the next qualified row.
Take A for example, Row 1 and 4 should be deleted because there is '@NA' in Column 3. Row 3 should also be deleted because there is '00' in Column 1.
Matrix B should like,
>>B
B =
'15' 'Y' [231.001]
'55' 'X' [9.001]
'10' 'X' [11.211]
B is a 3*3 cell matrix. Any suggestion is welcome!
0 Comments
Accepted Answer
Matt Kindig
on 8 Aug 2012
I'm not sure I understand what "merge" you are trying to do. It sounds like you just want to delete rows that satisfy a particular set of column requirements. If so, something like this should work:
An = cellfun(@str2double, A(:,1)); %convert first column to number
tf1 = ismember(An, 10:5:55); %check if A(:,1) is in 10:5:55
tf2 = ~strcmpi(A(:,3), '@NA'); %check that A(:,3) is NOT '@NA'
B = A(tf1 & tf2, :);
More Answers (1)
Azzi Abdelmalek
on 8 Aug 2012
Edited: Azzi Abdelmalek
on 8 Aug 2012
a1=A(:,1);B=A
a1=str2num(cell2mat(A(:,1)))
[i1,j1]=find(mod(a1,5)~=0 | a1<10)
B(i1,:)=[]
ind=cellfun(@(x) isnumeric(x),B(:,3))
result=B(ind,:)
0 Comments
See Also
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!