dplyr可以在多个列或组合键上联接吗?


111

我意识到dplyrv3.0允许您加入不同的变量:

left_join(x, y, by = c("a" = "b")将匹配x.ay.b

但是,是否可以结合使用变量的组合,还是必须事先添加复合键?

像这样:

left_join(x, y, by = c("a c" = "b d")使[ x.ax.c] 的串联匹配到[ y.by.d]

Answers:


199

更新以使用tibble()

您可以将长度大于1的命名向量传递给by参数left_join()

library(dplyr)

d1 <- tibble(
  x = letters[1:3],
  y = LETTERS[1:3],
  a = rnorm(3)
  )

d2 <- tibble(
  x2 = letters[3:1],
  y2 = LETTERS[3:1],
  b = rnorm(3)
  )

left_join(d1, d2, by = c("x" = "x2", "y" = "y2"))

5
谢谢你 当数据框中的列具有相同的名称(例如)时,也可以使用left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname"))。对某些人可能并不明显。
Anthony Simon Mielniczuk

10
当连接列相同时,您还可以避免=left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
糟糕...我当时在家里,但是...这似乎是AND ...,我认为这很有意义,但我希望它是x = x2或y = y2,因为我有多个索引旨在识别跨不同资源的重复但损坏的条目。
约书亚(Joshua Eric Turcotte)

名称不必相同,它们应该只是相应数据框中的有效列名,即一个可以具有列“ fname”而另一个可以具有“ firstname”,并且可以正常工作。
圣伊曼纽尔詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.