How do I remove rows with NaNs from my raw data?
3 次查看(过去 30 天)
显示 更早的评论
I have opened my excel data with xlsread and would like to remove all rows containing a NaN. Is there a possibility to do this at once? my data looks like this:
information blabla NaN NaN information blabla NaN NaN
NaN NaN NaN
Mydata Mydata Mydata My Data Mydata Mydata Mydata My Data Mydata Mydata NaN My Data Mydata Mydata Mydata My Data Mydata Mydata Mydata NaN Mydata Mydata Mydata My Data
It´s a cell array in case that matters :)
1 个评论
Guillaume
2014-11-18
It does matter greatly that it's a cell array. Other than the NaNs, what's in the cell array? strings?, matrices? or just scalars?
回答(2 个)
Giorgos Papakonstantinou
2014-11-18
I assume that your data are of nx1 or 1xn size. Then to delete the use this:
data(isnan(data)) = [];
4 个评论
Guillaume
2014-11-18
This works as long as each element of the cell array is a scalar.
It won't work on:
data = {'info', [1 2 3 4 NaN], NaN, 5};
Guillaume
2014-11-25
Tessa, try this:
c={'sometext', NaN, 12.5
'othertxt', 45, 12
NaN, 'blah', 7
48, 78, 'aaa'} %example
nanrows = any(cellfun(@(e) isnumeric(e) && isnan(e), c), 2);
c(nanrows, :) = []
It will work as long as you don't have a matrix of numbers in a cell. If you do, replace the
isnan(e)
by
any(isnan(e(:)))
2 个评论
Guillaume
2014-11-25
If you get an empty cell, that means each row must contain at least one NaN.
I find it a bit odd to discard a whole row if there's just one NaN in it, but that's what you requested: "remove all rows containing a NaN".
The @(e) isnumeric(e) && isnan(e) is an anonymous function where e is just a placeholder name for any cell of the cell array. This is equivalent to:
function out = anonymousfunction(e)
out = isnumeric(e) && isnan(e);
end
Obviously, you could use any name you want instead of e.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!