我想过滤diff()函数的结果,并使用data.table的效率。
DT[diff(timestamp) > 10]
不会执行该工作,因为结果集比源短。甚至创建一个过滤器,然后创建子集也至少会产生一个警告(我想避免)。
DT[, filter := diff(timestamp) > 10]
我可以使用dplyr或其他方式,但是我想要data.table的效率。有什么建议吗?
答案 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]