2つのデータテーブルに逆の順序で表示される2つの列の値に基づいて、結合/結合したい2つのデータテーブルがあります。ここ は、2つの例示的なデータテーブルである:2つの列を参照する条件でRの2つのデータテーブルを結合します。
library(data.table)
# df1
col1 <- c("aa", "bb", "cc", "dd")
col2 <- c("bb", "zz", "dd", "ff")
x <- c(130, 29, 122, 85)
dt1 <- data.table(col1, col2, x)
col1 col2 x
1: aa bb 130
2: bb zz 29
3: cc dd 122
4: dd ff 85
# df2
col1 <- c("zz", "bb", "cc", "ff")
col2 <- c("bb", "aa", "dd", "dd")
y <- c(34, 567, 56, 101)
dt2 <- data.table(col1, col2, y)
col1 col2 y
1: zz bb 34
2: bb aa 567
3: cc dd 56
4: ff dd 101
だからCOL1の値とcol2が一緒になって、両方のデータテーブルについて同じであるが、分布が異なっています。例えば。 aaはdt1ではcol1に、dt2ではcol2にあります。 col1とcol2のペアに基づいてデータテーブルをマージ/結合したいが、他のデータテーブルでは逆の順序になる可能性があります。
これは、マージ/ジョインなどでは、dt1のペアaa + bbがdt2のbb + aaとして発生することを「認識」できなければならないことを意味します。 DT2の正しい値、所望の出力はどちらか、すなわち:
col1 col2 x y
1: aa bb 130 567
2: bb zz 29 34
3: cc dd 122 56
4: dd ff 85 101
または本(すなわちDT1またはDT2の順序は保持されているかどうかは関係ありません):
col1 col2 x y
1: zz bb 29 34
2: bb aa 130 567
3: cc dd 122 56
4: ff dd 85 101
私の元のデータテーブルを持っています約。 300万行(はい、それは巨大です)なので、手で何かをすることは問題になりません。 私はここを見回しましたが、私のケースに該当する解決策は見つかりませんでした。誰もこれを行う方法を知っていますか?
ご迷惑をおかけして申し訳ありません。
dt2 [col1> col2、c( "col1"、 "col2"):=。(col2、col1)]; dt1 [dt2、on =。(col1、col2)] 'が働きます。あるいは、 ':='を使用して、提案されているように 'dt1'に列を追加することもできます。 – Frank
@フランク、これは動作します!本当にありがとう!それを回答として投稿したいのですか? –
Np、それはうれしいよ:)それでは、あなたの答えを自由に編集してください。 – Frank