【问题标题】:difftime in R with date/times spanning midnightR中的difftime,日期/时间跨越午夜
【发布时间】:2018-03-13 15:29:12
【问题描述】:

我有一个数据集,我在其中使用 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 中的其他函数来解决午夜过时的问题?

【问题讨论】:

  • 所以结束日期是开始日期之前?首先这有什么意义?
  • 它的时间不是日期,我不想有一个负时间,所以我换了减法。

标签: r difftime


【解决方案1】:

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

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

 > interval(df1$TowStartTime, df1$TowEndTime) %/% minutes(1)
 [1] -1425 -1424 -1429 -1429

【讨论】:

    【解决方案2】:

    没有错误,在这种情况下,TowEndTime 后面有一个TowStartTime,所以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"
    

    【讨论】:

    • 将代码更改为开始时间减去结束时间并不重要,您仍然会得到相同的值,但前面没有负号 1429。两个时间列前面都有一个奇怪的日期他们。这些日期不是日期。我有另一列日期正确 - 我应该替换不正确的日期并运行相同的代码吗?
    • 您有在不常见日期转换的负时间戳:as.POSIXct(-2209143587, origin="1970-01-01") [1] "1899-12-30 06:00: 13 CET"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多