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.