Czy dplyr może łączyć na wielu kolumnach lub kluczu złożonym?

111

Zdaję sobie sprawę, że dplyrwersja 3.0 pozwala na dołączanie do różnych zmiennych:

left_join(x, y, by = c("a" = "b")będzie pasować x.adoy.b

Czy jednak można połączyć kombinację zmiennych, czy też muszę wcześniej dodać klucz złożony?

Coś takiego:

left_join(x, y, by = c("a c" = "b d")aby dopasować konkatenację [ x.ai x.c] do [ y.bi y.d]

JasonAizkalns
źródło

Odpowiedzi:

200

Aktualizacja do używania tibble ()

Możesz przekazać nazwany wektor o długości większej niż 1 do byargumentu 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"))
davechilders
źródło
5
Dzięki za to; działa również, gdy kolumny w ramkach danych mają tę samą nazwę, np left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Może nie być oczywiste dla niektórych.
Anthony Simon Mielniczuk
10
Gdy kolumny łączenia są takie same, można również uniknąć =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders
2
Ooof ... Trzymałem się w domu, ale ... to wygląda na I ... co przypuszczalnie ma sens, ale miałem nadzieję, że będzie to x = x2 LUB y = y2, ponieważ mam wiele indeksów zbudowany, aby spróbować zidentyfikować zduplikowane, ale uszkodzone wpisy w różnych zasobach.
Joshua Eric Turcotte
Nazwy nie muszą być takie same, powinny to być tylko prawidłowe nazwy kolumn w odpowiedniej ramce danych, tj. Jedna może mieć kolumnę „fname”, a druga „firstname” i będzie działać dobrze.
San Emmanuel James