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

标签 r data.table

假设我有一个 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/

相关文章:

r - 使用 data.table 通过多个键进行子集化的奇怪行为

r - 如何循环创建多个条形图?

r - 有没有一种快速的方法将数据表变成数据表列表?

r - 在 R 的数组中查找最接近彼此值的 x 的索引

r - 从电子邮件正文中的附件和图像中提取 Zip+CSV 文件

r - fread() 失败,integer64 列中缺少值

r - 通过插入与旧行不同的新行来更新 data.table

r - data.table:使用 lapply 和 .SD 创建多列

R data.table : turn a vector into a one row data. 表

如果发生某些情况,R 在 data.table 中填充前导值和滞后值