mercredi 23 août 2017

R: NA substitution between data frame based on index

I have this data df.1:

   month a       b          c                  
    1    0 0.000000000 0.000000000  
    2    0 0.000000000 0.001503194  
    3    0 0.000000000 0.000000000 
    4    0 0.000000000 0.000000000  
    5    0 0.000000000 0.000000000  
    6    0 0.000000000 0.000000000  
    7    0 0.000000000 0.000000000  
    8    0 0.000000000 0.000000000  
    9    0 0.000000000 0.000000000  
    10   0 0.000000000 0.000000000  
    11  NA       NA          NA  
    12  NA       NA          NA  
    1   0 0.000000000 0.000000000 
    2   0 0.001537279 0.006917756  
    3   0 0.000000000 0.003669725  
    4   0 0.000000000 0.000000000  
    5   0 0.000000000 0.000000000  
    6   0 0.000000000 0.000000000  
    7   0 0.000000000 0.000000000  
    8   0 0.000000000 0.000000000  
    9   0 0.000000000 0.000000000  
    10   0 0.000000000 0.000000000
    11   0 0.000000000 0.013513514
    12  NA     NA          NA

and this data df.2:

month     a         b         c
    1  0.03842077 0.002266291 0.000000000 
    2  0.01359501 0.001027937 0.000000000 
    3  0.08631519 0.008732519 0.001376147 
    4  0.26564710 0.083635347 0.019053692 
    5  0.34839088 0.152203121 0.021010075 
    6  0.31767367 0.152029019 0.029397773 
    7  0.31507761 0.110973916 0.023445471 
    8  0.29773872 0.096458381 0.026745770 
    9  0.31226976 0.109342562 0.023996392 
    10 0.23841220 0.081582743 0.021674228 
    11 0.04379016 0.003519300 0.000000000 
    12 0.02244389 0.002493766 0.000000000 

I would to subsitute the value NA (and only NA) in df.1[,2:4] with value in df.2[,2:4] when the index in column 1 (month) is the same. I tried with this code:

res_new <- data.frame(matrix(nrow=nrow(df.1),ncol=3))
for (n in 1:12){
res_new <- data.frame(ifelse(is.na(df.1[which(df.1[,1] == n),2:4])==TRUE,df.2[which(df.2[,1] == n),2:4],df.1[,n]))

  }

but the result is a big new matrix where each NA value in df.1 is substitued with all value in df.2

How can do it? (Clearly my true data frame are more big!!)

Aucun commentaire:

Enregistrer un commentaire