我有近10米的行,我想从每组中只选择前三行。
我用
data[x == 1 | y > -6, .SD[1:3], by = z]
我需要得到结果
但它很慢,因为10M它只是火车组。所以也许任何想法如何优化这一点。提前谢谢。
答案 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)
确保您使用索引。
由于缺少数据样本,代码无法重现。所以我不能提供任何基准,这可能是有价值的,因为潜在的加速取决于数据,并可能导致减速。