有条件的合并/替换,由多列组成

时间:2018-03-26 14:07:10

标签: r dplyr

我的问题类似于这个问题: 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

但这对我来说似乎并不聪明,而且当我的数据框的列不属于条件时,我也不知道这会如何表现。

如果这个应该是一个副本,我很抱歉。如果是这样,请提示我。如果你的建议比我的加入方式更好:谢谢!我对许多软件包都很开放,但我不是一个真正的数据表...

1 个答案:

答案 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