Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

replacing the NaN with specific values

Asked by tzaloupas

tzaloupas (view profile)

on 14 Mar 2013

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

0 Comments

tzaloupas

tzaloupas (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Andrei Bobrov

Andrei Bobrov (view profile)

on 14 Mar 2013
Edited by Andrei Bobrov

Andrei Bobrov (view profile)

on 14 Mar 2013
Accepted answer
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));

4 Comments

tzaloupas

tzaloupas (view profile)

on 14 Mar 2013

Andrei please help me...

Andrei Bobrov

Andrei Bobrov (view profile)

on 14 Mar 2013

see part 'added..' in my answer

tzaloupas

tzaloupas (view profile)

on 14 Mar 2013

PERFECT!

Andrei Bobrov

Andrei Bobrov (view profile)

Contact us