首页 > 解决方案 > 合并和更改合并列的名称

问题描述

如何合并 2 个数据框,然后更改合并后的列名。请参见下面的示例。

> DF1
  A    B  C
1 3  axe aa
2 6 base bb
3 9  lol cc

> DF2
  D  E   F
1 6 ss gun
2 3 dd run
3 9 vv fun

> merge(x=DF1,y=DF2, by.x="A",by.y="D",all.x=TRUE)
  A    B  C  E   F
1 3  axe aa dd run
2 6 base bb ss gun
3 9  lol cc vv fun

我的问题是如何将合并的 E 和 F 重命名为 AE 和 AF 所以应该是这样的。

      A  B    C   A.E A.F
      3  axe  aa  dd  run
      6  base bb  ss  gun
      9  lol  cc  vv  fun

标签: rmerge

解决方案


我写了包safejoin,它非常简洁地解决了这个问题。

# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)

eat(DF1, DF2, .by = c(A = "D"), .prefix = "A")
#   A    B  C A_E A_F
# 1 3  axe aa  dd run
# 2 6 base bb  ss gun
# 3 9  lol cc  vv fun

要获得完全预期的输出,我们可以在参数中使用任何重命名函数 .prefix

eat(DF1, DF2, .by = c(A = "D"), .prefix = ~paste0("A.",.))
#   A    B  C A.E A.F
# 1 3  axe aa  dd run
# 2 6 base bb  ss gun
# 3 9  lol cc  vv fun

eat默认情况下是增强的左连接,该prefix参数的设计正是为了满足您的需求。


推荐阅读