2017-04-06 67 views
1

我已經與相同數量的行和列,113x159這種結構兩個數據幀:比較兩個dataframes的值,並代替它們

DF1:

1 2 3 4 
a AT AA AG CT 
b NA AG AT CC 
c AG GG GT AA 
d NA NA TT TC 

DF2:

1 2 3 4 
a NA 23 12 NA 
b NA 23 44 12 
c 11 14 27 55 
d NA NA 12 34 

我想將值與值db1和db2進行比較,如果db2的值是NA,而db1的值不是,則替換它(同樣如果db1值爲NA,並且不在db2中)。 最後,我DF必須是這樣的:

1 2 3 4 
a NA AA AG NA 
b NA AG AT CC 
c AG GG GT AA 
d NA NA TT CC 

我寫這個,如果循環,但它不工作:

merge.na<-function(x){ 
for (i in df2) AND (k in df1){ 
    if (i==NA) AND (k!=NA) 
    k==NA} 

任何想法?

+1

你不能這樣做'== NA'。使用'is.na()' –

+1

'is.na(df1)< - is.na(df2)' –

+0

@docendodiscimus當然更好,它工作得很好。我看到它在df1上重疊,但幸運的是我有一個副本。太好了! – mppd

回答

0

我們可以使用replace

replace(df1, is.na(df2), NA) 
# X1 X2 X3 X4 
#a <NA> AA AG <NA> 
#b <NA> AG AT CC 
#c AG GG GT AA 
#d <NA> <NA> TT TC