Array manipulation?

17 views (last 30 days)
Elin
Elin on 16 Apr 2011
Hi,
I'm looking for a piece of code that will replace NaN values in an array with the value immidiatly on top of the NaN value, I have paste an example below where I have replaced the values one by one, but that can hardly be the best way. would appreciate any assistance.
PPP =
2002
NaN
NaN
2008
2010
2012
NaN
2016
2018
2020
PP =
2002
2002
2002
2008
2010
2012
2012
2016
2018
2020

Accepted Answer

Walter Roberson
Walter Roberson on 16 Apr 2011
while true
K = find(isnan(PP),1,'first');
if isempty(K); break; end
PP(K) = PP(K-1);
end

More Answers (2)

Teja Muppirala
Teja Muppirala on 16 Apr 2011
This should be simple enough. Obviously the first element can't be a nan though.
PP = PPP;
for n = 1:numel(PP)
if isnan(PP(n))
PP(n) = PP(n-1);
end
end
  2 Comments
Walter Roberson
Walter Roberson on 16 Apr 2011
Why not start the "for" loop at 2 to prevent the possibility of indexing at 0 ?
Teja Muppirala
Teja Muppirala on 16 Apr 2011
Yeah, that's a good point. My thinking was that you'd probably want to have an error there if you did in fact accidentally have a nan at the beginning.

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 16 Apr 2011
fd1 = find(isnan(PPP))
PPP(fd1) = 0;
a = unique([fd1;fd1-1])
p = PPP(a);
PPP(a)=cell2mat(cellfun(@(x)cumsum(x),mat2cell(p,diff(find([p;1])),1),'UniformOutput', false))

Tags

Community Treasure Hunt

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

Start Hunting!