Bisakah dplyr bergabung di beberapa kolom atau kunci komposit?

111

Saya menyadarinya dplyr v3.0 memungkinkan Anda untuk bergabung dengan variabel yang berbeda:

left_join(x, y, by = c("a" = "b") akan cocok x.a dengany.b

Namun, apakah mungkin untuk menggabungkan kombinasi variabel atau apakah saya harus menambahkan kunci komposit sebelumnya?

Sesuatu seperti ini:

left_join(x, y, by = c("a c" = "b d")untuk mencocokkan rangkaian [ x.adan x.c] menjadi [ y.bdan y.d]

JasonAizkalns
sumber

Jawaban:

200

Memperbarui untuk menggunakan tibble ()

Anda bisa meneruskan vektor bernama dengan panjang lebih dari 1 ke byargumen 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
sumber
5
Terima kasih untuk ini; juga berfungsi ketika kolom dalam bingkai data memiliki nama yang sama, misalnya left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Mungkin tidak jelas bagi sebagian orang.
Anthony Simon Mielniczuk
10
Jika kolom gabungannya sama, Anda juga dapat menghindari =:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders
2
Ooof ... Saya bertahan di rumah, tapi ... ini tampaknya DAN ... yang menurut saya masuk akal tetapi saya berharap itu akan menjadi x = x2 ATAU y = y2, karena saya memiliki banyak indeks dibangun untuk mencoba mengidentifikasi entri duplikat tetapi rusak di berbagai sumber daya yang berbeda.
Joshua Eric Turcotte
Nama tidak harus sama, yang seharusnya hanya nama kolom yang valid dalam dataframe yang sesuai, yaitu satu dapat memiliki kolom "fname" dan yang lain "firstname" dan akan bekerja dengan baik.
San Emmanuel James