Delete rows from a subset of rows of a mixed cell array

2 visualizaciones (últimos 30 días)
I have a mixed 6x7 cell array
A = {'text' 12 NaN 14 'text' 16 17; 'text' 0 NaN 24 25 26 27; 31 32 33 34 35 0 'text'; NaN 42 43 44 45 46 0; 51 'text' 53 54 NaN 56 57; 61 62 0 64 65 NaN 67};
How do I delete the rows from 2 to 5 that have one or more cells in columns 3 to 6 equal to NaN or zero? The remaining rows should be rows 1, 4 and 6. Rows 1 and 6 should remain because, even if they have NaNs or zeros in columns 3 to 6, they should not be considered for elimination, and row 4 should remain because it does not have NaNs or zeros in columns 3 to 6. Thanks!
  2 comentarios
madhan ravi
madhan ravi el 5 de Oct. de 2018
Editada: madhan ravi el 5 de Oct. de 2018
Just can you type the desired result so that it’s easier to understand the problem?
Giovanni Barbarossa
Giovanni Barbarossa el 5 de Oct. de 2018
The answer should be
B = {'text' 12 NaN 14 'text' 16 17; NaN 42 43 44 45 46 0; 61 62 0 64 65 NaN 67};

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 5 de Oct. de 2018
Editada: Matt J el 5 de Oct. de 2018
keep=~any( cellfun( @(c)isequal(c,0)|isequaln(c,nan) , A(:,3:6) ) , 2);
keep([1,end])=1;
B=A(keep,:)
  6 comentarios
Matt J
Matt J el 5 de Oct. de 2018
Editada: Matt J el 5 de Oct. de 2018
I am not sure why the variable keep increases in size.
Because A(1:end-1,3:6) has more rows than A(2:end-1,3:6). You've given more rows to the middle part of keep but didn't take anything away.
Giovanni Barbarossa
Giovanni Barbarossa el 6 de Oct. de 2018
Clear now. Thank you very much.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by