Replace Nan with previous numbers
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
aggelos
le 5 Juil 2012
Réponse apportée : Chad Greene
le 1 Nov 2014
Hello there , I have a Variable of type double with natural gas Prices that contains Nans for dates that I don't have data and i want to replace Nans with the previous day known price. I tried function "fillts" but i didn't got what I wanted to . I appreciate any help Thanks in advance
data = [...
7.51
NaN
NaN
7.61
NaN
NaN
7.85];
0 commentaires
Réponse acceptée
Andrei Bobrov
le 5 Juil 2012
Modifié(e) : Andrei Bobrov
le 5 Juil 2012
t = ~isnan(data);
a = data(t);
out = a(cumsum(t));
ADD on Aggelos's comment
t = ~isnan(data);
idx = cumsum(t);
idx(~idx) = 1;
a = data(t);
out = a(idx);
Plus de réponses (3)
Image Analyst
le 5 Juil 2012
Try this:
m = [nan 2 3 4 nan 6 7 nan 9] % Sample data
indexes = find(isnan(m))
if ~isempty(indexes)
% Handle case where first index is nan - get rid of it.
if indexes(1) == 1
m = m(2:end);
indexes = indexes(2:end) - 1
end
% Take prior index if element is nan.
m(indexes) = m(indexes-1)
end
2 commentaires
Image Analyst
le 5 Juil 2012
Modifié(e) : Image Analyst
le 5 Juil 2012
You did something wrong, because I just copied and pasted my code on another computer and it worked great here also.
Plus you still need to say what you want done in case the first element is a nan. andrei and my vectorized solutions chose to handle it in different ways, while John non-vectorized code assumed that you would never have such a case (a non-robust, risky assumption). andrei's code seems to be even more robust than mine because his handles sequences of multiple nans in a row while mine doesn't. But his takes the second element for the first output element if the first input element is a nan, while mine just throws it away and shortens the array - that's why I asked what you want to do in such a case.
John
le 5 Juil 2012
try the following:
x = isnan(data);
for i = length(data)
if x(i) == 1
data(i) = data(i-1);
end
end
0 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing 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!