首页 > 解决方案 > 过滤 R data.table 中的差异

问题描述

我想过滤 diff() 函数的结果并使用 data.table 的效率。

DT[diff(timestamp) > 10]

不会做这项工作,因为结果集比源短。即使创建一个过滤器而不是子集创建至少一个警告(我想阻止)。

DT[, filter := diff(timestamp) > 10]

我可以使用 dplyr 或其他,但我想要 data.table 的效率。有什么建议么?

标签: rfilterdata.table

解决方案


diff()正如罗兰指出的那样,错误源于本质。n-1当应用于长度向量时,它返回长度向量n

例子:

diff(c(2, 4, 9))
[1] 2 5

当使用逻辑向量对 data.table 进行子集时,其行数必须等于向量的长度。因此可能的解决方案包括:

DT[-1][diff(DT$timestamp) > 10]
DT[c(FALSE, diff(timestamp) > 10)]

我可能会做这样的事情:

DT[timestamp - shift(timestamp) > 10]

推荐阅读