Replacing NaN with the average of previous and next cell value

5 visualizaciones (últimos 30 días)
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 comentarios
Jan
Jan el 7 de Jun. de 2018
Please post the input data in valid Matlab syntax. A "data set" might be a variety of things.
Paolo
Paolo el 7 de Jun. de 2018
Also, can there be multiple NaNs?

Iniciar sesión para comentar.

Respuesta aceptada

Razvan Carbunescu
Razvan Carbunescu el 7 de Jun. de 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 comentarios
krai
krai el 8 de Jun. de 2018
It works as required. Thanks
Jan
Jan el 8 de Jun. de 2018
+1. Yes, fillmissing is better than fillgaps.

Iniciar sesión para comentar.

Más respuestas (2)

Jan
Jan el 7 de Jun. de 2018
Editada: Jan el 7 de Jun. de 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 el 7 de Jun. de 2018
Editada: Paolo el 7 de Jun. de 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);

Categorías

Más información sobre NaNs en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by