How can I replace NaN elements with the nearest value in the same column?

I am trying to replace NaN's in a vector field with the nearest value.
% I have:
M=
NaN 12
18 14
NaN NaN
NaN NaN
NaN 16
12 NaN
12 NaN
NaN 12
16 NaN
%I desire:
M=
18 12
18 14
12 16
12 16
12 16
12 12
12 12
16 12
16 12
Any information will be helpful. Thank you

2 个评论

What do you mean by "nearest"? Do you mean "next good value"? Because that's what you appear to desire. For example the second NaN in column 1 is closer to 18 than 12.
I would like to have the first value of NaN to have the value of the next good value. However if the last value in the column is a NaN I would like for it to have the value of the previous good value

请先登录,再进行评论。

 采纳的回答

FIXED 2
m = flipud(M)
t = ~isnan(m);
ii = cumsum(t);
ii(ii == 0) = 1;
ii = bsxfun(@plus,[0,ii(end,1:end-1)],ii);
m1 = m(t);
out = flipud(m1(ii))

6 个评论

I keep getting an error of: Undefined function 'flip' for input arguments of type 'double'.
You are using an older version of MATLAB. Fixed for you.
Yeah I just realized that. However now I get Error using + Matrix dimensions must agree.
>> m = flipud(M);
t = ~isnan(m);
ii = cumsum(t);
ii(ii == 0) = 1;
ii = bsxfun(@plus,[0,ii(end,1:end-1)],ii);
m1 = m(t);
out = flipud(m1(ii))
out =
18 12
18 14
12 16
12 16
12 16
12 12
12 12
16 12
16 12
>>
Thank you for your help! This worked out great.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 NaNs 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by