筛选R data.table

时间:2018-08-03 07:56:38

标签: r filter data.table

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

DT[diff(timestamp) > 10]

不会执行该工作,因为结果集比源短。甚至创建一个过滤器,然后创建子集也至少会产生一个警告(我想避免)。

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

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

1 个答案:

答案 0 :(得分:1)

正如罗兰指出,错误源于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]