我想有条件地合并两个数据集,以便dataframe2中的值替换dataframe1中的值,除非dataframe2包含缺失值。在完全连接的情况下应执行此操作,以保留两个数据帧中的行。
此问题的灵感来自Conditional merge/replacement in R(似乎仅适用于内部联接)。
df1 <- data.frame(x1=1:4,x2=letters[1:4],stringsAsFactors=FALSE)
df2 <- data.frame(x1=2:5,x2=c("zz","qq", NA, "qy"),stringsAsFactors=FALSE)
我想要以下结果:
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 d
5 5 qy
我尝试了以下代码,尽管它为第4列返回了NA,但我希望保留原始值,因为在这种情况下df2包含4的缺失值。
df3 <- anti_join(df1, df2, by = "x1")
rbind(df3, df2)
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 <NA>
5 5 qy
答案 0 :(得分:3)
可以通过dplyr
完成。
library(dplyr)
full_join(df1,df2,by = c("x1" = "x1")) %>%
transmute(x1 = x1,x2 = coalesce(x2.y,x2.x))
x1 x2
1 1 a
2 2 zz
3 3 qq
4 4 d
5 5 qy