Replacing NaN with the average of previous and next cell value

6 vues (au cours des 30 derniers jours)
krai
krai le 7 Juin 2018
Commenté : Jan le 8 Juin 2018
I have a data set like,
time 1 2 3 4 5 6 7 8
exp1 45 67 78 NaN 80 81 82 83
These are two separate column with time and exp1 as header. how do I replace the NaN with the average of previous cell value and the next. Like in the above example, NaN should be replaced by 79 ((78+80)/2 )
Thanks in advance
  3 commentaires
Jan
Jan le 7 Juin 2018
Please post the input data in valid Matlab syntax. A "data set" might be a variety of things.
Paolo
Paolo le 7 Juin 2018
Also, can there be multiple NaNs?

Connectez-vous pour commenter.

Réponse acceptée

Razvan Carbunescu
Razvan Carbunescu le 7 Juin 2018
This sounds like a use for fillmissing with linear option:
>> exp1 = [45 67 78 NaN 80 81 82 83];
>> fillmissing(exp1,'linear')
ans =
45 67 78 79 80 81 82 83
  2 commentaires
krai
krai le 8 Juin 2018
It works as required. Thanks
Jan
Jan le 8 Juin 2018
+1. Yes, fillmissing is better than fillgaps.

Connectez-vous pour commenter.

Plus de réponses (2)

Jan
Jan le 7 Juin 2018
Modifié(e) : Jan le 7 Juin 2018
Maybe:
y = fillgaps(exp1, 3, 1)
% Needs Matlab >= R2016a
[EDITED] Sorry, this does not do, what I expect.
According to the documentation I'd expect a linear fit to the neighboring
elements.
Or:
valid = ~isnan(exp1);
y = exp1;
y(~valid) = interp1(time(valid), exp1(valid), time(~valid))
This is a linear interpolation.

Paolo
Paolo le 7 Juin 2018
Modifié(e) : Paolo le 7 Juin 2018
If you are working with a table:
%Table.
var = {'time';'exp1'};
time = [1;2;3;4;5;6;7;8];
exp1 = [45;67;78;NaN;80;81;82;83];
t = table(time,exp1);
x = t.exp1;
nan = isnan(x);
indx = find(nan);
x(nan) = (x(indx-1)+x(indx+1))/2;
t.exp1 = x;
If you are working with a cell array:
%Cell array.
var = {'time',1,2,3,4,5,6,7,8;'exp1',45,67,78,NaN,80,81,82,83};
x = cell2mat(var(2,2:end));
nan = isnan(x);
indx = find(nan);
x(nan) = (x(indx-1)+x(indx+1))/2;
var(2,2:end) = num2cell(x);

Catégories

En savoir plus sur Tables dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by