R 按组加速数据表子集设置

R 按组加速数据表子集设置,r,data.table,R,Data.table,我有近10万行,我只想从每组中选择前三行 我用 我需要得到一个结果 但它非常慢,因为它是唯一的火车组。所以也许有什么办法可以优化这个。提前谢谢。您的示例不可复制。我建议阅读如何在R标签上问SO问题,使R标签成为一个坚实的知识库,而不是快速和更为短暂的问答 对不起,我离题了 在使用data.table索引时,您可能会获得显著的加速。目前只需要对单个变量进行筛选。在你的情况下,你会看起来像: set2key(data, x) ix = data[x == 1, which = TRUE] iy =

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

我用

我需要得到一个结果


但它非常慢,因为它是唯一的火车组。所以也许有什么办法可以优化这个。提前谢谢。

您的示例不可复制。我建议阅读如何在R标签上问SO问题,使R标签成为一个坚实的知识库,而不是快速和更为短暂的问答

对不起,我离题了

在使用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), ...]
使用optionsdatatable.verbose=TRUE确保您正在使用索引


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

嗨,欢迎来到苏。请考虑阅读和如何制作A。它使其他人更容易帮助您。您正在运行哪个版本的data.table?你读过这个小插曲吗?@MichaelChirico data.table 1.9.6-最近你正在做的操作有一些GForce优化。在这个案例得到优化之前,试一下data[data[x==1L | y>-6L,.I[1:3],by=z]$V1]。最好的答案是data[data[x==1L | y>-6L,.I[1:3],by=z]$V1]。谢谢。@VitaliyRadchenko这取决于你的数据。当您一次使用一个不等式测试时,软件包会进行特殊的优化,就像Jan在这个答案中所做的那样,因此在某些情况下它可能会更快。@VitaliyRadchenko通常它取决于数据的基数。
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), ...]