r语言 - 如何定义 data.table 键,以便使用多个键进行最快的聚合



我试图更好地理解使用键控data.table s。阅读文档后,我想我了解如何在使用一个键时加速子集化。例如:

DT = data.table(x=rep(c("ad","bd","cd"),each=3), y=c(1,3,6), v=1:9)

选项一:

DT[x == "ad"]

选项二:

setkey(DT,x)
DT["ad"]
在这种情况下,选项

一比选项二慢得多,因为 data.table 使用该键更有效地搜索(使用二进制搜索与矢量扫描,我不明白,但我相信更快。

在使用 by 语句聚合数据子集的情况下,定义键的最快方法是什么?我应该对用于数据子集的列还是定义组的列进行键控?例如:

setkey(DT,x)
DT[!"bd",sum(v),by=y]

setkey(DT,y)
DT[!"bd",sum(v),by=y]

有没有办法同时使用密钥xy

编辑

将键设置为xy执行两个向量搜索吗?即:

setkey(DT,x,y)

编辑2

抱歉,我想问的是,当DT由x和y键控时,调用DT[!"bd",sum(v),by=y]执行两次二进制扫描吗?

我相信

当数据表 DT 同时由 x 和 y 键控时,不可能执行两次二进制扫描。相反,我会先在 x 上重复键控,然后在 y 上重复键控,如下所示:

DT = data.table(x=rep(c("ad","bd","cd"),each=3), y=as.character(c(1,3,4)), v=1:9)
setkey(DT,x)
tmp = DT[!"bd"]
setkey(tmp,y)
tmp[!"1",sum(v),by=y]

相关内容

  • 没有找到相关文章

最新更新