Dplyr birden çok sütun veya bileşik anahtar üzerinde birleşebilir mi?


111

dplyrV3.0'ın farklı değişkenlere katılmanıza izin verdiğinin farkındayım :

left_join(x, y, by = c("a" = "b")eşleşir x.aiçiny.b

Bununla birlikte, bir değişken kombinasyonuna katılmak mümkün mü yoksa önceden bir bileşik anahtar eklemem gerekiyor mu?

Bunun gibi bir şey:

left_join(x, y, by = c("a c" = "b d")[ x.ave x.c] 'nin [ y.bve y.d] ile eşleşmesi için

Yanıtlar:


200

Tibble () kullanmak için güncelleniyor

1'den büyük, adlandırılmış bir vektörü aşağıdaki bybağımsız değişkene iletebilirsiniz 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
Bunun için teşekkürler; veri çerçevelerindeki sütunlar aynı ada sahip olduğunda da çalışır, örn left_join(d1, d2, by = c("firstname" = "firstname", "lastname" = "lastname")). Bazıları için açık olmayabilir.
— Anthony Simon Mielniczuk

10
=left_join(d1, d2, by = c("firstname", "lastname"))
— Birleştirme

2
Ooof ... Evde bekliyordum, ama ... bu bir VE gibi görünüyor ... ki mantıklı olduğunu düşünüyorum ama bunun bir x = x2 VEYA y = y2 olmasını umuyordum, çünkü birden fazla indeksim var farklı kaynaklarda yinelenen ancak hasarlı girdileri belirlemeye çalışmak için oluşturulmuştur.
— Joshua Eric Turcotte

İsimlerin aynı olması gerekmez, sadece karşılık gelen veri çerçevesinde geçerli sütun isimleri olmalıdır, yani bir sütun "fname" ve diğeri "ad" olabilir ve gayet iyi çalışacaktır.
— San Emmanuel James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.