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]

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"))

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.