我有一个数据框,它看起来像这样:
submition_id time_answered
2 2017-11-06 14:19:30
2 2017-11-06 14:22:45
2 2017-11-06 14:24:55
2 2017-11-06 14:34:10
4 2017-11-06 14:31:23
4 2017-11-06 14:33:21
5 2017-11-06 14:54:48
5 2017-11-06 14:59:38
5 2017-11-06 15:05:39
... ...
所以基本上我的submition_id列是因子列time_answered列是 POSIXct 列。我想找到每个因素的时间差,基本上是 max(x( - min(x(。如何使用内置功能有效地做到这一点?这样我得到
submition_id difference
2 14.67
4 1.96
5 9.77
... ...
我也希望在几分钟内完成。
我相信SO上一定有类似的问题。
但是,为了完整起见,这里有一个data.table
解决方案(包括数据(:
library(data.table)
setDT(DT)[, .(diff = difftime(max(time_answered), min(time_answered), unit = 'mins')),
by = submition_id]
submition_id diff 1: 2 14.666667 mins 2: 4 1.966667 mins 3: 5 10.850000 mins
数据
DT <- readr::read_table("submition_id time_answered 2 2017-11-06 14:19:30 2 2017-11-06 14:22:45 2 2017-11-06 14:24:55 2 2017-11-06 14:34:10 4 2017-11-06 14:31:23 4 2017-11-06 14:33:21 5 2017-11-06 14:54:48 5 2017-11-06 14:59:38 5 2017-11-06 15:05:39")
require(dplyr)
DF <- DF%>%group_by(submition_id)%>%summarise(difference = difftime(min(time_answered), max(time_answered), units = "min"))
lubridate
包非常有用,interval
从lubridate
将在特定时间之间创建一个时间跨度,然后您可以使用 dplyr
和 arrange
中的group_by
计算此时间跨度的duration
......您能否提供一些数据示例/DPUT,因为其他人建议使用您的数据摘录