How do I remove NaN and / or interpolated data?

Hello.
I have the vectors
A=[1 NaN 3 ;...
4 NaN 6 ;...
5 NaN NaN;...
0 NaN NaN;...
7 8 NaN;...
0 0 9] ;...
(variable A) and t=0:1:5; (time), and I would like to do the following: If in a column there are more than 4 rows with NaN I exclude this column, otherwise I interpolate this data.
I have no idea how to do this. Can anyone help me giving suggestions?
Thanks.

 Accepted Answer

A=[1 NaN 3
4 NaN 6
5 NaN NaN
0 NaN NaN
7 8 NaN
0 0 9]
%remove columns with more than 4 nans
A(:, sum(isnan(A), 1) >= 4) = [];
%replace nans by interpolated values. Requires R2016b or later
A = fillmissing(A, 'linear')

1 Comment

The 'fillmissing' function did not run on my version of my matlab. So I used the first part that you suggested and then the suggestion of another person on another question (see below) to interpolate.
Thank you for your help. :)
 
%To interpolate, I used
nanx = isnan (A);
  t = 1: numeral (A);
  A (nanx) = interp1 (t (nanx), A (nanx), t (nanx));

Sign in to comment.

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!