0

我有一个数据集,我在其中使用 difftime 来计算 R 中两次之间的差异。对于从一天开始并持续到午夜之后的 4 条记录,我得到了无意义的答案。

数据集

time2<-dput(time2)
structure(list(StationID = c(201707123L, 201710032L, 201710148L, 
201710188L), TowStartTime = structure(c(-2209057289, -2209057558, 
-2209057779, -2209057812), class = c("POSIXct", "POSIXt"), tzone = ""), 
    TowEndTime = structure(c(-2209142790, -2209143047, -2209143555, 
    -2209143587), class = c("POSIXct", "POSIXt"), tzone = ""), 
    tow_time = c(-1425.01666666667, -1424.81666666667, -1429.6, 
    -1429.58333333333)), .Names = c("StationID", "TowStartTime", 
"TowEndTime", "tow_time"), row.names = c(572L, 783L, 1003L, 1079L
), class = "data.frame") 

用于计算 tow_tim 的代码

time2$tow_time<-as.numeric(difftime(strptime(time2$TowEndTime,"%Y-%m-%d %H:%M:%S"),
                    strptime(time2$TowStartTime,"%Y-%m-%d %H:%M:%S")),units="mins") 

我在开始时间之前有结束时间,因为我不想有负值。无论哪种方式,我都得到了相同的时差答案,它只是不是负值。有没有办法用 difftime 或 R 中的其他函数来解决午夜过时的问题?

4

2 回答 2

0

您可以考虑使用 lubridate 包中的区间函数。

但是,您的结束时间在开始时间之后仍然很奇怪。

 > interval(df1$TowStartTime, df1$TowEndTime) %/% minutes(1)
 [1] -1425 -1424 -1429 -1429
于 2018-03-13T15:45:08.397 回答
0

没有错误,在这种情况下你有 aTowStartTime之后TowEndTime,所以tow_time将是负面的。

例子:

StationID        TowStartTime          TowEndTime  tow_time
572  201707123 1899-12-31 05:58:31 1899-12-30 06:13:30 -1425.017

以小时为单位,您可以看到 EndTime 比 startTime 早 23 小时:

-1425.017/60
[1] -23.75028

这个输出没有错,可能是原始数据。您有在不常见日期转换的负时间戳:

as.POSIXct(-2209143587, origin="1970-01-01")
[1] "1899-12-30 06:00:13 CET"
于 2018-03-13T15:34:02.933 回答