假设我有一个 data.table
DT
,其中包含 a、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))]
我不知道中间步骤的地方。
最佳答案
您在问题中提出的中间步骤如下:
# unnamed args
DT[,.SD,,sum.b]
# named args
DT[j = .SD, keyby = sum.b]
# semi named
DT[, .SD, keyby = sum.b]
但是您应该根据您的数据对其进行基准测试,因为它可能比向量扫描慢,因为您需要设置 key 。
看起来 eddi 已经在评论中提供了该解决方案。他说的FR是data.table#1105 .
关于r - 在 R data.table 中链接时设置键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170372/