有没有办法在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组合在一起?
答案 0 :(得分:5)
扩展您的加入方式,您可以加入itemID
和min
值
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