having a cell array containing in 1st column a name of a country and in next column values, how can I delete rows containing 1 or more zeros values?

1 comentario

Stephen23
Stephen23 el 29 de En. de 2019
@Anastasia Anastasiadou: please upload your data in a .mat file by clicking the paperclip button.

Iniciar sesión para comentar.

 Respuesta aceptada

madhan ravi
madhan ravi el 29 de En. de 2019
Editada: madhan ravi el 29 de En. de 2019

0 votos

C={'country1' 11 33 55 40
'country2' 22 0 0 0
'country3' 58 44 55 5 };
idx=cellfun(@all,C,'un',0);
C(~all(cell2mat(idx),2),:)=[]

10 comentarios

Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
in this case nothing changes as idx is a matrix with all 1
madhan ravi
madhan ravi el 29 de En. de 2019
Editada: madhan ravi el 29 de En. de 2019
What? Still if your not satisfied then attach your data as .mat file as Stephen mentioned , I get the below result:
C =
2×5 cell array
{'country1'} {[11]} {[33]} {[55]} {[40]}
{'country3'} {[58]} {[44]} {[55]} {[ 5]}
madhan ravi
madhan ravi el 29 de En. de 2019
Anastasia Anastasiadou's answer moved here:
ok. thanks. in my cell does not work as it returns back the same cell with zeros again.
madhan ravi
madhan ravi el 29 de En. de 2019
Will you attach your data or not?
madhan ravi
madhan ravi el 29 de En. de 2019
Anastasia Anastasiadou's answer moved here:
it is not possible to attach my code as the cell is created from a tsv file. I will try to understand the error, as the idx matrix contains only 1.
thank you
madhan ravi
madhan ravi el 29 de En. de 2019
post a picture of your command window when you try my answer remove all the semicolons ;
madhan ravi
madhan ravi el 29 de En. de 2019
Anastasia Anastasiadou's answer moved here:
madhan ravi
madhan ravi el 29 de En. de 2019
Ok try this:
idx=cellfun(@str2double,C(:,2:end),'un',0); % where C is your cell array
C(~all(cell2mat(idx),2),:)=[]
Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
Editada: madhan ravi el 30 de En. de 2019
yeeeees! it worked!!!
thank you so muchh
madhan ravi
madhan ravi el 29 de En. de 2019
Editada: madhan ravi el 29 de En. de 2019
Help us to help you! , that's why we ask you to upload the required files at he very beginning when you ask a question so that a fast solution can be provided.

Iniciar sesión para comentar.

Más respuestas (2)

Omer Yasin Birey
Omer Yasin Birey el 29 de En. de 2019
Editada: Omer Yasin Birey el 29 de En. de 2019

0 votos

Lets say your cell array's variable name is 'a'
a = a(all(cellfun(@(x)x~=0,a),2),:);

5 comentarios

Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
sorry, i forgot to mention that I want to check from the 2nd column till the end. so lets assume that I have a cell 30*13 with element
country 11 33 55 40
country2 22 0 0 0
country3 58 44 55 5
I would like to delete the rows that contain zeros.
Sorry for the simple question but it is the first attempt with matlab :)
madhan ravi
madhan ravi el 29 de En. de 2019
you mean if there is any zero in the row you want to delete it?
Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
yes !
That should work
remZeros = a(all(cellfun(@(x)x~=0,a),2),:);
remZeros(2:end+1,:) = remZeros(1:end,:);
remZeros(1,:) = a(1,:);
Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
it does not.
Error using cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
and although I set uniformoutput to false again nothing

Iniciar sesión para comentar.

KSSV
KSSV el 29 de En. de 2019

0 votos

Let A be your matrix with size (m,n)
idx = A==0 ;
A(sum(A,2)~=n,:) = [] ;

2 comentarios

madhan ravi
madhan ravi el 29 de En. de 2019
? OP has mentioned it’s a cell array not a matrix.
Anastasia Anastasiadou
Anastasia Anastasiadou el 29 de En. de 2019
I have a cell array so the == does not work ! :)

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 29 de En. de 2019

Editada:

el 30 de En. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by