dplyr สามารถเข้าร่วมกับหลายคอลัมน์หรือคีย์คอมโพสิตได้หรือไม่?


111

ฉันตระหนักดีว่าdplyrv3.0 ช่วยให้คุณสามารถเข้าร่วมกับตัวแปรต่างๆได้:

left_join(x, y, by = c("a" = "b")จะจับคู่x.aกับy.b

อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะเข้าร่วมกับตัวแปรต่างๆหรือฉันต้องเพิ่มคีย์ผสมก่อน?

สิ่งนี้:

left_join(x, y, by = c("a c" = "b d")เพื่อจับคู่การเชื่อมต่อของ [ x.aและx.c] ถึง [ y.bและy.d]

คำตอบ:


200

การอัปเดตเพื่อใช้ tibble ()

คุณสามารถส่งผ่านที่ชื่อเวกเตอร์ของความยาวมากกว่า 1 กับbyข้อโต้แย้งของ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
ขอบคุณสำหรับสิ่งนี้; left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname"))ยังใช้งานได้เมื่อคอลัมน์ในเฟรมข้อมูลที่มีชื่อเดียวกันเช่น อาจไม่ชัดเจนสำหรับบางคน
Anthony Simon Mielniczuk

10
เมื่อคอลัมน์การรวมเหมือนกันคุณสามารถหลีกเลี่ยง=:left_join(d1, d2, by = c("firstname", "lastname"))
davechilders

2
Ooof ... ฉันกำลังออกจากบ้าน แต่ ... ดูเหมือนว่าจะเป็น AND ... ซึ่งฉันคิดว่าสมเหตุสมผล แต่ฉันหวังว่ามันจะเป็น x = x2 หรือ y = y2 เนื่องจากฉันมีดัชนีหลายตัว สร้างขึ้นเพื่อพยายามระบุรายการที่ซ้ำกัน แต่เสียหายในทรัพยากรที่แตกต่างกัน
Joshua Eric Turcotte

ชื่อไม่จำเป็นต้องเหมือนกัน แต่ควรเป็นชื่อคอลัมน์ที่ถูกต้องในดาต้าเฟรมที่เกี่ยวข้องเช่นหนึ่งสามารถมีคอลัมน์ "fname" และ "ชื่อแรก" อื่น ๆ และจะทำงานได้ดี
San Emmanuel James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.