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'))
我想按组计算 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'))