共通の列とkey
でルックアップテーブルとマージして、data.tableに新しい列を作成したいと思います。次に、この新しい列(、、 )の値から、data.tableの列にインデックスを付ける3つの新しい列(、、)を生成します。index1
index2
key
a
b
c
a
b
c
value
私のdata.tableは次のようになります。
index1 index2 value
1 2 0 0.00
2 1 2 -5.00
3 3 2 -5.00
4 3 2 17.50
5 2 2 15.00
6 1 2 -7.50
7 3 2 3.75
8 1 2 -8.75
9 2 1 15.00
10 2 1 12.50
ルックアップテーブルは次のとおりです。
index1 index2 key
1 1 1 a
2 1 2 b
3 2 1 a
4 2 2 c
5 3 1 c
6 3 2 b
最終結果は次のようになります。
index1 index2 value key a b c
1 2 0 0.00 NA NA NA NA
2 1 2 -5.00 b NA -5.00 NA
3 3 2 -5.00 b NA -5.00 NA
4 3 2 17.50 b NA 17.50 NA
5 2 2 15.00 c NA NA 15.00
6 1 2 -7.50 b NA -7.50 NA
7 3 2 3.75 b NA 3.75 NA
8 1 2 -8.75 b NA -8.75 NA
9 2 1 15.00 a 15.00 NA NA
10 2 1 12.50 a 12.50 NA NA
最初にdata.tableとルックアップテーブルをでマージして解決しようとしましたmerge()
。次に、J()
3回別々に使用して、上記の結果を達成しました。私はdata.tableにかなり慣れていませんが、手順を数回繰り返すのではなく、これを解決するためのよりエレガントな方法を学びたいと思っています。これが私のコードです:
DT <- merge(DT, lookup, by=c('index1', 'index2'), all.x=TRUE)
DT <- data.table(DT) #Don't know why but DT became a data.frame after merge()
DT[J("a"), a:=value]
DT[J("b"), b:=value]
DT[J("c"), c:=value]