如何在r data.tables中[join on] [where]

Sin*_*bre 4 r data.table

有没有办法在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)

然而,这看起来有点迂回.有没有更好的方法来结合连接和哪里?

Sym*_*xAU 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
Run Code Online (Sandbox Code Playgroud)