cellfun(@isnan) and erasing NaN
이전 댓글 표시
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.
채택된 답변
추가 답변 (1개)
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
Victor
2013년 2월 19일
Azzi Abdelmalek
2013년 2월 19일
편집: Azzi Abdelmalek
2013년 2월 19일
Then use
xlswrite('newfile.xls', a(~any(cell2mat(cellfun(@isnan,a,'un',0)), 2), :));
Victor
2013년 2월 19일
Azzi Abdelmalek
2013년 2월 19일
편집: Azzi Abdelmalek
2013년 2월 19일
I've tried to fellow your code, now try this
A={'a', 1, NaN, 1, 1, 1, 1
'b',2,NaN,NaN,NaN,NaN,NaN
'c',3,NaN,3,3,3,3}
b=A(:,4:end)
A=A(~all(cellfun(@isnan,b),2),:)
Victor
2013년 2월 20일
Azzi Abdelmalek
2013년 2월 20일
You have not to use cell2mat before xlswrite
Victor
2013년 2월 20일
카테고리
도움말 센터 및 File Exchange에서 Spreadsheets에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!