有没有办法在data.table中组合连接和子集功能?说我有下表:
dt = data.table(itemID = c(1,1,2,2),bucketID = c(1,2,2,3),value = 1:4)
Run Code Online (Sandbox Code Playgroud)
我想为每个项目的最低桶设置值为零.我的想法是:
ends = dt[,.(min = min(bucketID)),itemID]
dt[ends,on="itemID",bucketID==min,value:=0]
Run Code Online (Sandbox Code Playgroud)
即连接表,找到两行相同的位置,然后更新值列.但这不起作用.我可以得到正确的结果:
ends = dt[,.(min = min(bucketID)),itemID]
dt = dt[ends,on="itemID"][bucketID==min,value:=0][,c(-4)]
Run Code Online (Sandbox Code Playgroud)
然而,这看起来有点迂回.有没有更好的方法来结合连接和哪里?
扩展您的连接方法,您可以同时加入值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
Run Code Online (Sandbox Code Playgroud)