dplyr은 여러 열 또는 복합 키에서 조인 할 수 있습니까?


111

dplyrv3.0을 사용하면 다른 변수에 조인 할 수 있다는 것을 알고 있습니다.

left_join(x, y, by = c("a" = "b")일치 x.a합니다y.b

그러나 변수 조합으로 조인 할 수 있습니까? 아니면 미리 복합 키를 추가해야합니까?

이 같은:

left_join(x, y, by = c("a c" = "b d")연접의 [하였습니다 x.ax.c발을 [ y.by.d]

답변:


200

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
Ooof ... 나는 집을 지키고 있었지만 ... 이것은 AND 인 것 같습니다 ... 그건 말이되는 것 같지만 여러 인덱스가 있기 때문에 x = x2 OR y = y2가되기를 바랬습니다. 서로 다른 리소스에서 중복되지만 손상된 항목을 식별하도록 구축되었습니다.
Joshua Eric Turcotte

이름이 동일 할 필요는 없으며 해당 데이터 프레임에서 유효한 열 이름이어야합니다. 즉, 하나는 "fname"열과 다른 "firstname"열을 가질 수 있으며 잘 작동합니다.
San Emmanuel James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.