使用R计算2个时间戳之间的时间差(以小时为单位)

Calculate time difference between 2 timestamps in hours using R

我正在尝试获取 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

然后我尝试使用代码将小时差设置为格式=“%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格式的时差吗?

非常感谢您的建议

不同之处在于 difftime class 建立在 numeric 之上。我们可以将 difftime 中的 units 指定为 seconds 并使用 lubridate

中的 seconds_to_period
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 或日期时间 class 即 POSIXct、POSIXlt 而不适用于 numeric/difftime 对象

数据

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")