cellfun(@isnan) and erasing NaN
Afficher commentaires plus anciens
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.
Réponse acceptée
Plus de réponses (1)
Azzi Abdelmalek
le 19 Fév 2013
Modifié(e) : Azzi Abdelmalek
le 19 Fév 2013
Use
cellfun(@isnan,a,'UniformOutput',false)
Which means
xlswrite('newfile.xls', a(~any(cellfun(@isnan,a,'UniformOutput',false), 2), :));
7 commentaires
Victor
le 19 Fév 2013
Azzi Abdelmalek
le 19 Fév 2013
Modifié(e) : Azzi Abdelmalek
le 19 Fév 2013
Then use
xlswrite('newfile.xls', a(~any(cell2mat(cellfun(@isnan,a,'un',0)), 2), :));
Victor
le 19 Fév 2013
Azzi Abdelmalek
le 19 Fév 2013
Modifié(e) : Azzi Abdelmalek
le 19 Fév 2013
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
le 20 Fév 2013
Azzi Abdelmalek
le 20 Fév 2013
You have not to use cell2mat before xlswrite
Victor
le 20 Fév 2013
Catégories
En savoir plus sur Data Type Conversion dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!