【问题标题】:Calculate time difference between 2 timestamps in hours using R使用 R 计算 2 个时间戳之间的时间差(以小时为单位)
【发布时间】:2021-08-17 23:46:31
【问题描述】:

我正在尝试获取 2 个时间戳之间的时间差(以小时为单位)。

我有数据:

ID      Lat          Long    Traffic        Start_Time        End_Time
1      -80.424      40.4242    54       2018-01-01 01:00   2018-01-01 01:10
2      -80.114      40.4131    30       2018-01-01 02:30   2018-01-01 02:40
3      -80.784      40.1142    12       2018-01-01 06:15   2018-01-01 07:20

我想得到这样的数据

ID      Lat          Long    Traffic        Start_Time        End_Time        differ_hrs 

1      -80.424      40.4242    54       2018-01-01 01:00   2018-01-01 01:10    00:50
2      -80.114      40.4131    30       2018-01-02 08:30   2018-01-02 08:40    01:10
3      -80.784      40.1142    12       2018-01-04 19:26   2018-01-04 20:11    01:15

我尝试了这段代码来捕捉小时的差异:

df$differ_hrs<- difftime(df$End_Time, df$Start_Time, units = "hours")

但是,它捕捉到了这样的差异:

    ID      Lat          Long    Traffic        Start_Time        End_Time        differ_hrs 

    1      -80.424      40.4242    54       2018-01-01 01:00   2018-01-01 01:10    0.5
    2      -80.114      40.4131    30       2018-01-02 08:30   2018-01-02 08:40    0.70
    3      -80.784      40.1142    12       2018-01-04 19:26   2018-01-04 20:11    0.75

然后我尝试使用代码将小时差设置为 format="%H%M":

df$differ_HHMM<- format(strptime(df$differ_hrs, format="%H%M"), format = "%H:%M")

但它会产生所有的 NA。

所以我决定尝试一种不同的方法来计算差异并在命令本身中添加“%H%M”这样的格式:

df$differ_HHMM<- as.numeric(difftime(strptime(paste(df[,6]),"%Y-%m-%d %H:%M:%S"), strptime(paste(df[,5]),"%Y-%m-%d %H:%M:%S"),format="%H%M",  units = "hours"))

但我不断收到错误消息:

Error in difftime(strptime(paste(df[, 6]), "%Y-%m-%d %H:%M:%S"), strptime(paste(df[,  : 
  unused argument (format = "%H:%M:%S")

有什么方法可以计算%H:%M格式的时间差吗?

非常感谢您的建议

【问题讨论】:

    标签: r timestamp strptime difftime


    【解决方案1】:

    区别在于difftime 类建立在numeric 之上。我们可以将difftime 中的units 指定为seconds,并使用seconds_to_period 中的lubridate

    library(lubridate)
    df$differ_hrs<- as.numeric(difftime(df$End_Time, df$Start_Time, 
            units = "secs"))
    out <- seconds_to_period(df$differ_hrs)
    df$differ_HHMM <- sprintf('%02d:%02d', out@hour, out$minute)
    

    注意:format 仅适用于 Date 或 Datetime 类,即 POSIXct、POSIXlt,不适用于数字/差异时间对象

    数据

    df <- structure(list(ID = 1:3, Lat = c(-80.424, -80.114, -80.784), 
        Long = c(40.4242, 40.4131, 40.1142), Traffic = c(54L, 30L, 
        12L), Start_Time = structure(c(1514786400, 1514791800, 1514805300
        ), class = c("POSIXct", "POSIXt"), tzone = ""), End_Time = structure(c(1514787000, 
        1514792400, 1514809200), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, 
    -3L), class = "data.frame")
    

    【讨论】:

    • 非常感谢!它工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2015-03-14
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多