Kann dplyr mehrere Spalten oder zusammengesetzte Schlüssel verbinden?


111

Mir ist klar, dplyrdass Sie mit Version 3.0 verschiedene Variablen verknüpfen können:

left_join(x, y, by = c("a" = "b")passt auf x.azuy.b

Ist es jedoch möglich, eine Kombination von Variablen zu verknüpfen, oder muss ich vorher einen zusammengesetzten Schlüssel hinzufügen?

Etwas wie das:

left_join(x, y, by = c("a c" = "b d")um die Verkettung von [ x.aund x.c] mit [ y.bund y.d] abzugleichen

Antworten:


199

Aktualisierung auf tibble ()

Sie können einen benannten Vektor mit einer Länge von mehr als 1 an das byArgument übergeben 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
Danke dafür; funktioniert auch, wenn die Spalten in den Datenrahmen den gleichen Namen haben, z left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Für manche vielleicht nicht offensichtlich.
Anthony Simon Mielniczuk

10
Wenn die Join-Spalten identisch sind, können Sie auch die folgenden vermeiden =:left_join(d1, d2, by = c("firstname", "lastname"))
Davechilders

2
Ooof ... Ich habe mich zu Hause aufgehalten, aber ... das scheint ein UND zu sein ... was ich für sinnvoll halte, aber ich hatte gehofft, es wäre ein x = x2 ODER y = y2, da ich mehrere Indizes habe Entwickelt, um zu versuchen, doppelte, aber beschädigte Einträge über unterschiedliche Ressourcen hinweg zu identifizieren.
Joshua Eric Turcotte

Die Namen müssen nicht identisch sein, sie sollten nur gültige Spaltennamen im entsprechenden Datenrahmen sein, dh einer kann eine Spalte "fname" und der andere "Vorname" haben und funktioniert einwandfrei.
San Emmanuel James
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.