Effacer les filtres
Effacer les filtres

Delete the Whole Row and Merge The Next Row in a matrix

2 vues (au cours des 30 derniers jours)
Xiao Tang
Xiao Tang le 8 Août 2012
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!

Réponse acceptée

Matt Kindig
Matt Kindig le 8 Août 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, :);

Plus de réponses (1)

Azzi Abdelmalek
Azzi Abdelmalek le 8 Août 2012
Modifié(e) : Azzi Abdelmalek le 8 Août 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,:)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by