R 比较两个数据帧的值并替换它们

R 比较两个数据帧的值并替换它们,r,dataframe,R,Dataframe,我有两个具有相同行数和列数的数据帧,113x159具有此结构: df1: df2: 我想将值与值db1 e db2进行比较,如果db2的值是NA,而db1的值不是NA,则替换它(如果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 我已经编写了这个if循环,但它不起作用: merge.na<-function(x){ for (i in

我有两个具有相同行数和列数的数据帧,
113x159
具有此结构:

df1:

df2:

我想将值与值db1 e db2进行比较,如果db2的值是NA,而db1的值不是NA,则替换它(如果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
我已经编写了这个if循环,但它不起作用:

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

merge.na我们可以使用
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
replace(df1,is.na(df2),na)
#x1x2x3x4
#AA公司
#在CC的b AG
#c AG GG GT AA
#d TT TC

我们可以使用
替换

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
replace(df1,is.na(df2),na)
#x1x2x3x4
#AA公司
#在CC的b AG
#c AG GG GT AA
#d TT TC

您不能执行
==NA
。使用
is.na()。我看到它在df1上重叠,但幸运的是我有一个副本。太多了!你不能做
==NA
。使用
is.na()。我看到它在df1上重叠,但幸运的是我有一个副本。太多了!
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