在data.table

时间:2015-04-22 22:40:12

标签: r data.table

是否可以在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

1 个答案:

答案 0 :(得分:4)

我不确定为什么你认为即使DT[a == 1][b == 0, c := 2]在理论上有效,它也会比DT[a == 1 & b == 0, c := 2]更有效

无论哪种方式,您的案例中最有效的解决方案是按ab键入,并在执行二进制连接时通过引用进行分配

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