Borrar filtros
Borrar filtros

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

2 visualizaciones (últimos 30 días)
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!

Respuesta aceptada

Matt Kindig
Matt Kindig el 8 de Ag. de 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, :);

Más respuestas (1)

Azzi Abdelmalek
Azzi Abdelmalek el 8 de Ag. de 2012
Editada: Azzi Abdelmalek el 8 de Ag. de 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,:)

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by