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 Comment

@Anastasia Anastasiadou: please upload your data in a .mat file by clicking the paperclip button.

Sign in to comment.

 Accepted Answer

madhan ravi
madhan ravi on 29 Jan 2019
Edited: madhan ravi on 29 Jan 2019
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 Comments

in this case nothing changes as idx is a matrix with all 1
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]}
Anastasia Anastasiadou's answer moved here:
ok. thanks. in my cell does not work as it returns back the same cell with zeros again.
Will you attach your data or not?
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
post a picture of your command window when you try my answer remove all the semicolons ;
Anastasia Anastasiadou's answer moved here:
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 on 29 Jan 2019
Edited: madhan ravi on 30 Jan 2019
yeeeees! it worked!!!
thank you so muchh
madhan ravi
madhan ravi on 29 Jan 2019
Edited: madhan ravi on 29 Jan 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.

Sign in to comment.

More Answers (2)

Omer Yasin Birey
Omer Yasin Birey on 29 Jan 2019
Edited: Omer Yasin Birey on 29 Jan 2019
Lets say your cell array's variable name is 'a'
a = a(all(cellfun(@(x)x~=0,a),2),:);

5 Comments

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 :)
you mean if there is any zero in the row you want to delete it?
That should work
remZeros = a(all(cellfun(@(x)x~=0,a),2),:);
remZeros(2:end+1,:) = remZeros(1:end,:);
remZeros(1,:) = a(1,:);
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

Sign in to comment.

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

2 Comments

? OP has mentioned it’s a cell array not a matrix.
I have a cell array so the == does not work ! :)

Sign in to comment.

Categories

Tags

Community Treasure Hunt

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

Start Hunting!