replacing the NaN with specific values

Dear all,
I have the following matrix
A={'country' 'values'
'E' '1'
'E' [NaN]
'E' [NaN]
'E' '2'
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' '3'
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'EE' [NaN]
'E' '4'
'I' '1'
'I' [NaN]
'I' [NaN]
'I' '2'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '3'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '4'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '5'
'K' '1'
'K' [NaN]
'K' [NaN]
'K' '2'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '3'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '4'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '5'
};
The first column describes the countries and the second the values corresponding to each country.
For each country the initial value is always '1'. For each country I want to replace the NaNs with the value that is before them.
So for the first country I want to have
'E' '1'
'E' '1'
'E' '1'
'E' '2'
'E' '2'
'E' '2'
'E' '2'
'E' '2'
'E' '2'
'E' '3'
'E' '3'
'E' '3'
'E' '3'
'E' '3'
'EE' '3'
'E' '4'
for country I I want to have
'I' '1'
'I' '1'
'I' '1'
'I' '2'
'I' '2'
'I' '2'
'I' '2'
'I' '2'
'I' '2'
'I' '3'
'I' '3'
'I' '3'
'I' '3'
'I' '3'
'I' '3'
'I' '4'
'I' '4'
'I' '4'
'I' '4'
'I' '4'
'I' '4'
'I' '5'
and so so..
I am trying to come up with a code but I got stuck
Is there any way of doing that
My real vector contains 300 countries, so doing manual is quite tedious
thanks in advance

 採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 3 月 14 日
編集済み: Andrei Bobrov 2013 年 3 月 14 日

1 投票

A1 = A(2:end,:);
t = ~cellfun(@isnan,A1(:,2));
k = A1(t,2);
A(2:end,2) = k(cumsum(t));
added on comment
A1 = A(2:end,2);
t = cellfun(@ischar,A1);
A1(t) = cellfun(@str2double,A1(t),'un',0);
t1 = ~cellfun(@isnan,A1);
k = A1(t1);
A(2:end,2) = k(cumsum(t1));

5 件のコメント

tzaloupas
tzaloupas 2013 年 3 月 14 日
Hi Andrei,
you are the best. It works fine
I forgot to mention that for some countries I have fixed values ; see for country 'z' and'T'
A={'country' 'values'
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'Z' [50]
'E' '1'
'E' [NaN]
'E' [NaN]
'E' '2'
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' '3'
'E' [NaN]
'E' [NaN]
'E' [NaN]
'E' [NaN]
'EE' [NaN]
'E' '4'
'T' [5]
'T' [5]
'T' [5]
'T' [5]
'T' [5]
'T' [5]
'T' [5]
'T' [5]
'I' '1'
'I' [NaN]
'I' [NaN]
'I' '2'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '3'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '4'
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' [NaN]
'I' '5'
'K' '1'
'K' [NaN]
'K' [NaN]
'K' '2'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '3'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '4'
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' [NaN]
'K' '5'
};
In that case when I apply the code I get this message
Error using cellfun
Non-scalar in Uniform output, at index 1,
output 1.
Set 'UniformOutput' to false.
Could you help me modify the code. I am so close! Please?
Best
tzaloupas
tzaloupas 2013 年 3 月 14 日
Andrei please help me...
Andrei Bobrov
Andrei Bobrov 2013 年 3 月 14 日
see part 'added..' in my answer
tzaloupas
tzaloupas 2013 年 3 月 14 日
PERFECT!
Khaing Zin Htwe
Khaing Zin Htwe 2016 年 5 月 10 日
To replace integer zeros to NaN vaules in Array ,how can I do it ,sir.I have 141x3084 array that include NaN values unfortunately. After reducing dimensions to give input to ANFIS classifier, i get the result as NaN,seriously. Please help me ,sir , Andrei Bobrov.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeResizing and Reshaping Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by