Dplyr peut-il se joindre sur plusieurs colonnes ou clé composite?


111

Je me rends compte que la dplyrv3.0 vous permet de rejoindre sur différentes variables:

left_join(x, y, by = c("a" = "b")correspondra x.aày.b

Cependant, est-il possible de joindre sur une combinaison de variables ou dois-je ajouter une clé composite au préalable?

Quelque chose comme ça:

left_join(x, y, by = c("a c" = "b d")pour faire correspondre la concaténation de [ x.aet x.c] à [ y.bet y.d]

Réponses:


200

Mise à jour pour utiliser tibble ()

Vous pouvez passer un vecteur nommé de longueur supérieure à 1 à l' byargument de 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
Merci pour cela; fonctionne également lorsque les colonnes des blocs de données ont le même nom, par exemple left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Peut-être pas évident pour certains.
— Anthony Simon Mielniczuk

10
Lorsque les colonnes de jointure sont les mêmes, vous pouvez également éviter =:left_join(d1, d2, by = c("firstname", "lastname"))
— davechilders

2
Ooof ... je tenais la maison, mais ... cela semble être un ET ... ce qui, je suppose, a du sens, mais j'espérais que ce serait un x = x2 OU y = y2, car j'ai plusieurs index conçu pour essayer d'identifier les entrées dupliquées mais endommagées sur des ressources disparates.
— Joshua Eric Turcotte

Les noms ne doivent pas nécessairement être les mêmes, ils doivent simplement être des noms de colonne valides dans le dataframe correspondant, c'est-à-dire que l'un peut avoir une colonne "fname" et l'autre "firstname" et fonctionnera très bien.
— San Emmanuel James
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.