date[i + 1] 和 date[i] 按组的时间差

time difference between date[i + 1] and date[i] by group

我想按组计算 tab$date[i + 1] 和 tab$date[i] 之间的时间差(以小时为单位)。这是我的代码:

setDT(tab)
system.time(tab <- tab[ , diffTime := c(0,diff(date, units="hours")), by="ID"])
tab$diffTime <- round(tab$diffTime)

问题是我获得了小时、分钟和秒:

Date                   DiffTime
2012-03-05 01:00:36    0
2012-03-05 03:00:35    2
2012-03-05 05:01:05    2
...
2010-01-29 21:01:00    0
2010-01-29 22:01:01    60
2010-01-29 23:01:12    60
...
2012-02-13 05:00:34    0
2012-02-13 16:01:06    39632
2012-02-14 03:00:47    39581

日期是 POSIXct 数据。 我怎样才能只获得小时数?

我们可以使用 difftime 并将 units 指定为 'hours'。

library(data.table)
setDT(tab)[, DiffTime := c(0, round(difftime(date[-1L], date[-.N], 
                                 units='hours'))), by= ID]
tab
#   ID                date DiffTime
#1:  1 2012-03-05 01:00:36        0
#2:  1 2012-03-05 03:00:35        2
#3:  1 2012-03-05 05:01:05        2
#4:  2 2010-01-29 21:01:00        0 
#5:  2 2010-01-29 22:01:01        1
#6:  2 2010-01-29 23:01:12        1

数据

tab <- data.frame(ID= rep(1:2, each=3),
  date= as.POSIXct(c('2012-03-05 01:00:36', '2012-03-05 03:00:35', 
  '2012-03-05 05:01:05', '2010-01-29 21:01:00', '2010-01-29 22:01:01',
  '2010-01-29 23:01:12'), format='%Y-%m-%d %H:%M:%S'))