我想通过与常用列&key
的查找表合并,在我的 data.table中创建一个新列。然后从这个新列(, , )的值中,我想生成 3 个新列(, , )来索引data.table 中的列。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()
三个不同的时间来实现上述结果。我对 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]