按组加速data.table子集化

时间:2016-02-12 14:31:04

标签: r data.table

我有近10米的行,我想从每组中只选择前三行。

我用

data[x == 1 | y > -6, .SD[1:3], by = z]

我需要得到结果

enter image description here

但它很慢,因为10M它只是火车组。所以也许任何想法如何优化这一点。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您的示例无法重现。我建议阅读如何在R标签上提出SO问题,以使SO上的R标签成为一个可靠的知识库,而不是快速且更加时间的Q& A.

对于偏离主题感到抱歉。

使用data.table索引时,您可能会获得显着的加速。它目前只需要过滤单个变量。在你的情况下,你会看起来像:

set2key(data, x)
ix = data[x == 1, which = TRUE]
iy = data[y > -6, which = TRUE] # this will not use index (yet)!
data[union(ix, iy), ...]

使用options("datatable.verbose"=TRUE)确保您使用索引。

由于缺少数据样本,代码无法重现。所以我不能提供任何基准,这可能是有价值的,因为潜在的加速取决于数据,并可能导致减速。