Missing data values with interpolation

Hello everybody,
I have a cell array each containing a sequence of diferent values. The sequences contains some missing values (I've represented with NaN). I would like to replace all this NaN places with numbers. I think the better way is do an interpolation but I don't know how to code this Nan and how to save it on a table in Matlab.
I1= interp1(x,y,'linear');
Greetings,
Pd) I've tried this but it doesn't work
nanData = isnan(y);
index = 1:numel(y);
data2 = y;
data2(nanData) = interp1(index(~nanData), y(~nanData), index(nanData));

 Accepted Answer

x={ 1 2 3 4 5 6 7 8 9 10}
y={ 0.3850 NaN 3.0394 NaN 0.6475 1.0000 1.5000 NaN 1.1506 0.58}
x=cell2mat(x);y=cell2mat(y);
xi=x(find(~isnan(y)));yi=y(find(~isnan(y)))
result=interp1(xi,yi,x,'linear')

4 Comments

Thanks Azzi. I see it works with your example but I receive the following message:
??? Cell contents reference from a
non-cell array object.
Error in ==> cell2mat at 44
cellclass = class(c{1});
I've checked the brackets and also the line 44 but there's nothing unusual.
This is the code:
load doc1.txt
x= doc1(:,1);
y= doc1(:,2);
% mxy= [m1x,m1y];
x=cell2mat(x);y=cell2mat(y);
xi=x(find(~isnan(y));yi=y(find(~isnan(y))
result=interp1(xi,yi,x,'linear'
I'm going to try to check again what's wrong. Thank you so much.
Hi Emmanuelle! See ADD in my answer.
Thanks Andrei, it works! ;)
Hi, im facing the same issue. Can you explain what do you mean by " see ADD in my answer" ?

Sign in to comment.

More Answers (2)

Steven Lord
Steven Lord on 15 Dec 2018
If you're using release R2016b or later you can use the fillmissing function.

1 Comment

this is the best answer thanks Steven!
like ypu from IRAN!

Sign in to comment.

Andrei Bobrov
Andrei Bobrov on 7 Aug 2012
Edited: Andrei Bobrov on 8 Aug 2012
eg
data
Data = cell(1,5);
for jj = 1:5
k = [randi(250,randi([10,15]),1); nan(randi([0 3]),1) ];
Data{jj} = k(randperm(numel(k)));
end
solution
for jj = 1:numel(Data)
n = (1:numel(Data{jj}))';
k = ~isnan(Data{jj});
Data{jj} = interp1(n(k),Data{jj}(k),n,'linear','extrap');
end
ADD
load doc1.txt
x = doc1(:,1);
y= doc1(:,2);
t = all(~isnan([x,y]),2);
out = interp1(x(t),y(t),x,'linear','extrap');

Community Treasure Hunt

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

Start Hunting!