我有一个数据框,它看起来像这样:
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
... ...
我也希望在几分钟内完成。
答案 0 :(得分:2)
require(dplyr)
DF <- DF%>%group_by(submition_id)%>%summarise(difference = difftime(min(time_answered), max(time_answered), units = "min"))
答案 1 :(得分:2)
我相信在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")
答案 2 :(得分:0)
lubridate
包非常有用,来自interval
的{{1}}会在特定时间之间创建一个时间跨度,然后您可以计算此时间跨度的lubridate
,使用duration
和group_by
中的dplyr
...可以提供一些数据示例/输入,因为其他人建议使用数据摘录