在R data.table中链接时设置键

时间:2015-07-01 19:47:25

标签: r data.table

想象一下,我有data.table DTa, b, c。我想根据a过滤行(例如,只选择值为"A"的行),按b计算c的总和。我可以通过

使用二进制搜索进行过滤来有效地完成此操作
setkey(DT, a)
DT[.("A"), .(sum.B = sum(B)), by = .(C)]

如果我想根据新获得的sum.b的值过滤行怎么办?如果我想保留sum.b等于c(3, 4, 5)之一的行,我可以通过说

来做到这一点
DT[.("A"), .(sum.B = sum(B)), by = .(C)][sum.b %in% c(3, 4, 5)]

但后一种操作使用慢速矢量扫描。有没有办法在飞行中设置键""在链接的同时?理想情况下我会

DT[.("A"), .(sum.B = sum(B)), by = .(C)][??set sum.b as key??][.(c(3, 4, 5))]

我不知道中间步骤。

1 个答案:

答案 0 :(得分:2)

您在问题中提出的中间步骤如下:

# unnamed args
DT[,.SD,,sum.b]
# named args
DT[j = .SD, keyby = sum.b]
# semi named
DT[, .SD, keyby = sum.b]

然而,您应该对数据进行基准测试,因为可能比矢量扫描慢,因为您需要设置密钥。

看起来eddi已在评论中提供了该解决方案。他提到的FR是{{3}}。