用另一个 DF 的值替换一个 DF 中的 NA

Replace NAs in one DF with values from another DF

我有一个包含一些缺失值的 df:

df <- data.frame(key = c('ID1','ID2','ID3','ID4','ID5'),
             a = c(7,3,5,7,5),
             b = c(1,7,5,7,4),
             c = c(1,NA,NA,4,1),
             d = c(8,NA,NA,7,6))

我创建了第二个 df,其中包含我想插入到间隙中的值:

to_insert <- data.frame(key = c('ID2','ID3'),
                    c = c(4,5),
                    d = c(1,1))

我将如何进行合并?如果我尝试完全外部联接,我会得到重复的列:

merge(df,to_insert,by="key",all=TRUE)

给出这个:

  key a b c.x d.x c.y d.y
1 ID1 7 1   1   8  NA  NA
2 ID2 3 7  NA  NA   4   1
3 ID3 5 5  NA  NA   5   1
4 ID4 7 7   4   7  NA  NA
5 ID5 5 4   1   6  NA  NA

当我想要这样的时候:

  key a  b  c  d 
1 ID1 7  1  1  8 
2 ID2 3  7  4  1 
3 ID3 5  5  5  1
4 ID4 7  7  4  7
5 ID5 5  4  1  6

您宁愿替换也不愿合并。尝试使用 match.

df[match(to_insert$key, df$key), match(names(to_insert), names(df))] <- to_insert
df
#   key a b c d
# 1 ID1 7 1 1 8
# 2 ID2 3 7 4 1
# 3 ID3 5 5 5 1
# 4 ID4 7 7 4 7
# 5 ID5 5 4 1 6