不能在相同的data.table表达式中使用i.field和by =

Ste*_*der 6 r data.table

当连接两个数据表并by=在同一个表达式中使用时,每当我尝试使用j中的内部data.table中的列时,我都会收到错误.我可以把东西分成两个单独的表达式,但这是额外的输入 - 并且在使用大型数据集时可能会遇到性能损失

举个例子

require(data.table)
DT1 <- data.table(k1 = 1:2, k2 = c('a', 'a', 'a', 'b', 'b', 'c'), v1 = 1:6, key = 'k2')
DT2 <- data.table(k1 = c('a', 'b', 'c'), w1 = 3^(1:3), key = 'k1')

DT1[DT2, sum(v1*w1), by=k1]    # fails complaining about being unable to find w1
DT1[DT2, sum(v1*i.w1), by=k1]  # also fails with the same error
DT1[DT2][, sum(v1*w1), by=k1]  # works
Run Code Online (Sandbox Code Playgroud)

对于小数据集,加入然后组方法很好.但是,对于具有多列的数据集,使用两个data.tables的所有列创建中间结果是一个重要的负载(我的实际数据表大小约为1-2 Gb).

虽然我可以减少所涉及的列数

DT1[DT2[,.(k1, w1)]][,sum(v1*w1),by=k1]
Run Code Online (Sandbox Code Playgroud)

这消除了data.tables的一个重要值 - 不必经常指定数据集之间的关系.它还要求我记住每次进行连接时在两个不同的位置具体列.

有什么明显的东西我不见了吗?

Bra*_*ser 0

可能存在重复问题,并链接到 data.table 功能请求#733