首页 > 解决方案 > 与 is.unsorted() 函数混淆

问题描述

当我运行这两行代码时,数据是 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)

我很困惑,因为如果数据未排序,那么不应该至少有一个时间差应该是负值吗?

标签: rdata.table

解决方案


您的问题是缺失值。查看

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 值)。


推荐阅读