Find row with NaN in it.

121 views (last 30 days)
Artyom
Artyom on 17 Aug 2014
Commented: sworland on 9 Dec 2015
I have variable X.
X=[2 4 6;
4 5 NaN
3 NaN NaN
5 8 12
3 8 NaN];
How to find any row with NaN in it. ismember([3 8 NaN],X,'rows') gives me 0.
  1 Comment
Artyom
Artyom on 17 Aug 2014
I mean how to find specific row in the matrix (for example 'find' [3 8 NaN] must return me [0;0;0;0;1];).

Sign in to comment.

Accepted Answer

per isakson
per isakson on 17 Aug 2014
Edited: per isakson on 17 Aug 2014
A start:
is(:,1) = X(:,1)==3;
is(:,2) = X(:,2)==8;
is(:,3) = isnan( X(:,3));
all( is, 2 )
which returns
ans =
0
0
0
0
1
AFAIK: isnan is the only way to spot NaN.
I don't think there is a magic one-liner. A little function along the example above is one way. Loop over all columns, ....

More Answers (3)

Guillaume
Guillaume on 17 Aug 2014
[rows, columns] = find(isnan(X));
unique(row);
will give you the row indices

Roger Stafford
Roger Stafford on 17 Aug 2014
Edited: Roger Stafford on 17 Aug 2014
The code
t = any(isnan(X),2);
will return you a column vector of logicals in which each element is true if the corresponding row of X contains a NaN. I trust that would meet your needs. In your example you would get t = [false;true;true;false;true].

Andrei Bobrov
Andrei Bobrov on 17 Aug 2014
Edited: Andrei Bobrov on 17 Aug 2014
X=[2 4 6;
4 5 NaN
3 NaN NaN
5 8 12
3 8 NaN];
с = [3 8 NaN];
z = [X;c];
z(isnan(z)) = max(z(:)) + 1;
out = ismember(z(1:end-1,:),z(end,:),'rows');
other example
X = randi(100,200,15);
X([5,125],[2,10]) = nan; % your array
c = X(5,:);
z = [X;c];
z(isnan(z)) = max(z(:)) + 1;
out = ismember(z(1:end-1,:),z(end,:),'rows');

Categories

Find more on Characters and Strings in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!