如何在r data.tables

时间:2018-01-30 23:48:11

标签: r data.table

有没有办法在data.table中组合连接和子集功能?说我有下表:

dt = data.table(itemID = c(1,1,2,2),bucketID = c(1,2,2,3),value = 1:4)

我想为每个项目的最低桶设置值为零。我的想法是:

ends = dt[,.(min = min(bucketID)),itemID]
dt[ends,on="itemID",bucketID==min,value:=0]

即。连接表,找到两行相同的位置,然后更新值列。但这并不奏效。我可以通过以下方式获得正确的结果:

ends = dt[,.(min = min(bucketID)),itemID]
dt = dt[ends,on="itemID"][bucketID==min,value:=0][,c(-4)]

然而,这似乎有点迂回。是否有更好的方法将join和where组合在一起?

1 个答案:

答案 0 :(得分:5)

扩展您的加入方式,您可以加入itemIDmin

dt[
    ends
    , on = c("itemID", bucketID = "min")
    , value := 0
]

dt
#    itemID bucketID value
# 1:      1        1     0
# 2:      1        2     2
# 3:      2        2     0
# 4:      2        3     4