是否可以在data.table中通过引用组合链接和赋值?
例如,我想这样做:
DT[a == 1][b == 0, c := 2]
但是,这会使原始表保持不变,因为临时表似乎是在DT [a == 1]之后创建的,随后会更改并返回。
我宁愿不做
DT[a == 1 & b == 0, c := 2]
因为这很慢,我宁愿避免
DT <- DT[a == 1][b == 0, c := 2]
因为我更愿意通过引用来完成作业。这个问题是问题[1]的一部分,没有答案。
[1] Conditional binary join and update by reference using the data.table package
答案 0 :(得分:4)
我不确定为什么你认为即使DT[a == 1][b == 0, c := 2]
在理论上有效,它也会比DT[a == 1 & b == 0, c := 2]
更有效
无论哪种方式,您的案例中最有效的解决方案是按a
和b
键入,并在执行二进制连接时通过引用进行分配
DT <- data.table(a = c(1, 1, 1, 2, 2), b = c(0, 2, 0, 1, 1)) ## mock data
setkey(DT, a, b) ## keying by both `a` and `b`
DT[J(1, 0), c := 2] ## Update `c` by reference
DT
# a b c
# 1: 1 0 2
# 2: 1 0 2
# 3: 1 2 NA
# 4: 2 1 NA
# 5: 2 1 NA