cellfun(@isnan) and erasing NaN

19 次查看(过去 30 天)
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.

采纳的回答

Sean de Wolski
Sean de Wolski 2013-2-19
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 个评论
Sean de Wolski
Sean de Wolski 2013-2-20
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()
Victor
Victor 2013-2-20
Thanks, now it works.

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-2-19
编辑:Azzi Abdelmalek 2013-2-19
Use
cellfun(@isnan,a,'UniformOutput',false)
Which means
xlswrite('newfile.xls', a(~any(cellfun(@isnan,a,'UniformOutput',false), 2), :));
  7 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-2-20
You have not to use cell2mat before xlswrite
Victor
Victor 2013-2-20
Thanks Azzi, but to be honest, I do not think with this method, I can read the file, do the manipulation and then write it back.

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by