我想在我的data.table中创建一个新列key
,方法是使用公共列index1
&的查找表进行合并。 index2
。然后,根据新key
列(a
,b
,c
)的值,我想生成3个新列(a
,{ {1}},b
)索引data.table中的c
列。
我的data.table看起来像这样:
value
查找表是这样的:
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()
三次单独的时间来实现上述结果。我对data.table很新,但是我会喜欢学习一种更优雅的方法来解决这个问题,而不是多次重复这个过程。这是我的代码:
J()
答案 0 :(得分:8)
因为你想加入index1& index2,您可以使用merge
,或者如果您将这些作为键分配给每个表,那么您只需使用[]
即可加入。 (如DT[lookup]
)
setkey(lookup, index1, index2)
setkey(DT, index1, index2)
然后您可以从key
表格中迭代每个唯一lookup
,如下所示
keyVals <- unique(lookup[, key])
for (k in keyVals)
DT[lookup[key==k], c(k) := value]
结果:
DT
# index1 index2 value a b c
# 1: 1 2 -5.00 NA -5.00 NA
# 2: 1 2 -7.50 NA -7.50 NA
# 3: 1 2 -8.75 NA -8.75 NA
# 4: 2 0 0.00 NA NA NA
# 5: 2 1 15.00 15.0 NA NA
# 6: 2 1 12.50 12.5 NA NA
# 7: 2 2 15.00 NA NA 15
# 8: 3 2 -5.00 NA -5.00 NA
# 9: 3 2 17.50 NA 17.50 NA
# 10: 3 2 3.75 NA 3.75 NA