cellfun(@isnan) and erasing NaN
19 views (last 30 days)
Show older comments
Dear all,
I have a matrix like this in excel file:
A=[a, 1, NaN, 1, 1, 1, 1;...
b, 2, NaN, NaN, NaN, NaN, NaN;...
c, 3, NaN, 3, 3, 3, 3];
and I want to erase the rows in which has NaN starting from fourth column. In another words I would like to have
B=[a, 1, NaN, 1, 1, 1, 1;...
c, 3, NaN, 3, 3, 3, 3];
I used this:
[ndata, text, a] = xlsread('test.xls');
xlswrite('newfile.xls', a(~any(cellfun(@isnan,a), 2), :));
But it works just in cases of having numbers in the excel file. But with the above example ,in which I have a, b,and c, I receive this error:
Error using cellfun Non-scalar in Uniform output, at index 1, output 1. Set 'UniformOutput' to false.
Or if you have other idea to do this operation please let me know.
0 Comments
Accepted Answer
Sean de Wolski
on 19 Feb 2013
Close!
A={'a', 1, NaN, 1, 1, 1, 1;...
'b', 2, NaN, NaN, NaN, NaN, NaN;...
'c', 3, NaN, 3, 3, 3, 3};
B = A(~any(cellfun(@isnan,A(:,4:end)),2),:)
3 Comments
Sean de Wolski
on 20 Feb 2013
Break it into pieces.
What does whos() return after running the first line?
Then run the line I have. Does it work?
If not, why not? If so, then worry about xlswrite()
More Answers (1)
Azzi Abdelmalek
on 19 Feb 2013
Edited: Azzi Abdelmalek
on 19 Feb 2013
Use
cellfun(@isnan,a,'UniformOutput',false)
Which means
xlswrite('newfile.xls', a(~any(cellfun(@isnan,a,'UniformOutput',false), 2), :));
7 Comments
See Also
Categories
Find more on Spreadsheets in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!