与is.unsorted()函数的混淆

时间:2018-09-26 15:14:05

标签: r data.table

当我运行这两行代码时,数据是data.table对象:

data[,is.unsorted(POSIXct, na.rm=T)]
data[,which(diff(POSIXct)<0)]

那是我得到的结果

> data[,is.unsorted(POSIXct, na.rm=T)]
[1] TRUE
> data[,which(diff(POSIXct)<0)]
integer(0)

我很困惑,因为如果数据未排序,那么是否应该至少存在一个为负值的时差?

1 个答案:

答案 0 :(得分:3)

您的问题是缺少值。检出

x <- c(1, NA, 0)
is.unsorted(x, na.rm=TRUE)
# TRUE
which(diff(x)<0)
# integer(0)

diff函数进行成对的距离,它不会跳过丢失的值。你可以看到

diff(x)
# [1] NA NA

因此,没有成对的值小于0,因为它们正与NA进行比较(which仅丢弃NA值)。