left_join两个数据帧并覆盖

Ved*_*dda 7 r dplyr

我想合并两个数据框,df2覆盖任何NA或存在的值df1. 合并数据框和覆盖值提供了一个data.table选项,但我想知道是否有办法执行此操作dplyr.我已经尝试了所有_join选项但似乎没有做到这一点.有没有办法做到这一点dplyr

这是一个例子:

df1 <- data.frame(y = c("A", "B", "C", "D"), x1 = c(1,2,NA, 4)) 
df2 <- data.frame(y = c("A", "B", "C"), x1 = c(5, 6, 7))
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  y x1
1 A  5
2 B  6
3 C  7
4 D  4
Run Code Online (Sandbox Code Playgroud)

don*_*lek 5

我认为您想要保留的值df2仅添加那些df1不存在的值,df2这是做什么的anti_join

“ anti_join返回x中的所有行,其中y中没有匹配的值,而仅保留x中的列。”

我的解决方案:

df3 <- anti_join(df1, df2, by = "y") %>% bind_rows(df2)

Warning messages:
1: In anti_join_impl(x, y, by$x, by$y) :
  joining factors with different levels, coercing to character vector
2: In rbind_all(x, .id) : Unequal factor levels: coercing to character

> df3
Source: local data frame [4 x 2]

      y    x1
  (chr) (dbl)
1     D     4
2     A     5
3     B     6
4     C     7
Run Code Online (Sandbox Code Playgroud)

该行提供了所需的输出(以不同的顺序),但是,在处理数据集时,请务必注意警告消息,请确保将其读取y为字符变量。

  • 谢谢!最后!我的背景不是计算机科学,奇怪的是我很难找到这个答案。我应该一直在寻找什么?“R 优先合并数据帧”或“R 如果值不存在,则从其他数据帧完成数据帧”或“R 合并而不覆盖”或“R 添加行(如果不存在)”等...均不成功... (2认同)