我想合并两个数据框,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)
我认为您想要保留的值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为字符变量。