Azzera filtri
Azzera filtri

How to substitue NaN cells in a column (or matrix) with the previous valid number?

2 visualizzazioni (ultimi 30 giorni)
Hi guys, pretty easy question i guess...
I have a very big matrix full of NaN values, thousands of them in each column. I need to replace them with the fist oldest value available..
Let's say that i have a column like this:
1
2
4
NaN
2
In this case i should replace NaN with 2. I have some complexities, for example i may not have a rectangular matrix and i could have some nan at the end of the column... in this case i should replace the nan with the first value "up".. Example:
1
3
2
NaN
NaN
In this case the NaN must become both 2.
I attach an example of a little .mat file ready to make some tries.
Thank you so much for the help.

Risposta accettata

Joseph Cheng
Joseph Cheng il 18 Mar 2014
Modificato: Joseph Cheng il 18 Mar 2014
This is the quickest way I was able to come up with. Not very elegant or probably the most optimal way but here is it. I would start by finding the last non-NaN value and having it substitute the last entry in the column. This ensures that the very last entry is a number. Then replaces each NaN value with the following number until there is no more NaN values left in that column. Then moves to the next column.
iexample = Example;
for i =1:4
temp = iexample(:,i);
A = isnan(temp);
A = find(A==0);
temp(end) = temp(A(end));
while sum(isnan(temp))~=0
B = isnan(temp);
B = find(B==1);
temp(B)=temp(B+1);
end
iexample(:,i)=temp;
end
I was hoping i would be able to come up with a scheme instead of the while loop by substituting consecutive NaN by the first valid number after the NaN. But haven't figure that one out yet.

Più risposte (0)

Categorie

Scopri di più su Function Creation in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by