r - 与 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)
我很困惑,因为如果数据未排序,那么不应该至少有一个时间差应该是负值吗?
解决方案
您的问题是缺失值。查看
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 值)。
推荐阅读
- r - 根据列中的字符串值过滤数据框中的行
- ios - Apple In App Purchase Auto Renewal Subscriptions 付款未扣除,但 latest_receipt_info 中的 expires_date 已增加
- ubuntu-16.04 - 如何在 Ubuntu 上运行 Identity Server 4 源代码?
- excel - 代码多次保存我的文件而不是一次
- python - 无法从部分初始化的模块“stegano”导入“lsb”
- docker-volume - 无法使用 docker -v 将主机文件夹映射到容器文件夹
- r - 可读地修改位于嵌套列表深处的元素
- angular - Angular 路由器激活了错误的路由保护
- ios - 如何设置 fastlane 凭据
- sql - 堆栈 FIFO 无数据