Replacing NaN values with average values of the nearest numbers?

10 vues (au cours des 30 derniers jours)
Isaac
Isaac le 29 Oct 2014
Commenté : Dyuman Joshi le 13 Déc 2023
Hi, I have a data set with blocks of NaN Values. Is there a command that can fill in missing values by using the average of the values on either side?
For example, in the data set:
2
3
5
7
NaN
NaN
12
Is there a way to get something like 8.66 and 10.33 for the NaN numbers?
Also, would this work if there were multiple columns?
Thanks, Isaac
  1 commentaire
Dyuman Joshi
Dyuman Joshi le 13 Déc 2023
For newer versions, fillmissing (Introduced in R2016b) is a robust option -
nandata=[2;3;5;7;nan;nan;12];
fillmissing(nandata, 'linear')
ans = 7×1
2.0000 3.0000 5.0000 7.0000 8.6667 10.3333 12.0000

Connectez-vous pour commenter.

Réponses (2)

Michael Haderlein
Michael Haderlein le 29 Oct 2014
Hi Isaac,
you can use interp1:
nandata=[2;3;5;7;nan;nan;12];
xdata=(1:length(data))';
data=interp1(xdata(~isnan(nandata)),nandata(~isnan(nandata)),xdata)
data =
2.0000
3.0000
5.0000
7.0000
8.6667
10.3333
12.0000
For multiple columns, you'll need bsxfun:
nandata2=[2 1;3 nan;5 2;7 nan;nan nan;nan 1;12 10];
xdata2=(1:size(nandata,1))';
data2=bsxfun(@(x,y) interp1(y(~isnan(x)),x(~isnan(x)),y),nandata2,xdata2)
data2 =
2.0000 1.0000
3.0000 1.5000
5.0000 2.0000
7.0000 1.6667
8.6667 1.3333
10.3333 1.0000
12.0000 10.0000
  1 commentaire
Joshua Larkin
Joshua Larkin le 14 Déc 2018
Modifié(e) : Joshua Larkin le 14 Déc 2018
Finally I found somthing that worked for what I needed. Thanks for the great answer!

Connectez-vous pour commenter.


Chad Greene
Chad Greene le 4 Nov 2014
With repnan,
nandata=[2;3;5;7;nan;nan;12];
data = repnan(nandata)
2.0000
3.0000
5.0000
7.0000
8.6667
10.3333
12.0000
  1 commentaire
Ismet Handzic
Ismet Handzic le 10 Avr 2020
hmmm.... only seems to work when there are bounded values, like that last 12 at the end there. But good suggestion!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by