我的问题类似于这个问题: Conditional merge/replacement in R
但我想通过多个列合并,在我的例子中由x1和x2合并 (现实生活中有超过2列)。
值得注意的是,这些条件导致唯一组合(唯一行)!
let currentTheme = LightTheme.self
期望的输出
df1 <- data.frame(x1 = c(1,1,2,2), x2 = rep(letters[1:2],2), x3 = letters[1:4], stringsAsFactors = FALSE )
df2 <- data.frame(x1 = c(1,2,3), x2 = letters[1:3], x3 = c('xx','zz','yy'), stringsAsFactors = FALSE )
df1
x1 x2 x3
1 1 a a
2 1 b b
3 2 a c
4 2 b d
df2
x1 x2 x3
1 1 a xx
2 2 b zz
3 3 c yy
以下工作原理并为示例提供所需的输出:
x1 x2 x3 # 'merge/replaced' df1$x3 with df2$x3, by x1 & x2
1 1 a xx
2 1 b b
3 2 a c
4 2 b zz
但这对我来说似乎并不聪明,而且当我的数据框的列不属于条件时,我也不知道这会如何表现。
如果这个应该是一个副本,我很抱歉。如果是这样,请提示我。如果你的建议比我的加入方式更好:谢谢!我对许多软件包都很开放,但我不是一个真正的数据表...
答案 0 :(得分:1)
我不确定你是否会考虑这个“更聪明”,但只需一次加入通话即可实现此目的:
library(dplyr)
left_join(df1, df2, by = c('x1', 'x2')) %>%
mutate(x3 = if_else(is.na(x3.y), x3.x, x3.y)) %>%
select(-x3.y, -x3.x)
x1 x2 x3
1 1 a xx
2 1 b b
3 2 a c
4 2 b zz