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.ax.cする]を[ y.bかつy.d]

回答:


199

tibble()を使用するための更新

次のby引数に、1より大きい長さの名前付きベクトルを渡すことができます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 OR y = y2になることを望んでいました異なるリソース間で重複しているが破損しているエントリを特定しようとするために構築されています。
ジョシュアエリックターコット2018

名前は同じである必要はありません。対応するデータフレームで有効な列名である必要があります。つまり、1つは「fname」列、もう1つは「firstname」列を持つことができ、問題なく機能します。
San Emmanuel James
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.