R 计算分组行集合中经过的时间
我知道有很多stackoverflow页面询问如何计算行之间的日期时间差,但我没有找到一个页面回答我的特定问题。大多数人对后续行之间的数据感兴趣,但我需要为一系列个体计算每个个体经过了多少时间。比如说R 计算分组行集合中经过的时间,r,datetime,R,Datetime,我知道有很多stackoverflow页面询问如何计算行之间的日期时间差,但我没有找到一个页面回答我的特定问题。大多数人对后续行之间的数据感兴趣,但我需要为一系列个体计算每个个体经过了多少时间。比如说 id time (of the day) 1 12:00:40 1 12:06:35 1 12:12:00 2 14:59:22 2 15:10:40 我想计算如下: id total time (second
id time (of the day)
1 12:00:40
1 12:06:35
1 12:12:00
2 14:59:22
2 15:10:40
我想计算如下:
id total time (seconds)
1 760
2 678
提前感谢您的帮助,如果在其他地方得到了答复,我很抱歉,我无法找到它。数据。表方法 首先将时间字符串设置为POSIXct格式,这样您就可以使用像
difftime
这样的函数。当一个id的时间跨度超过1天(比如从22小时到02小时)时,这就很方便了
第二步是计算最小时间值和最大时间值之间的difftime(以秒为单位)(按id组)
库(data.table)
dt一个完整的基R方法
aggregate(time~id, transform(df, time = as.POSIXct(time, format = "%H:%M:%S")),
function(x) sum(as.numeric(diff(x), "secs")))
# id time
#1 1 680
#2 2 678
使用dplyr
和lubridate
,我们首先将time
转换为Period
类,并将其转换为秒,然后取其差值的和
library(dplyr)
library(lubridate)
df %>%
group_by(id) %>%
summarise(total_time = sum(diff(seconds(hms(time)))))
# id total_time
# <int> <dbl>
#1 1 680
#2 2 678
库(dplyr)
图书馆(lubridate)
df%>%
分组依据(id)%>%
总结(总时间=总和(差异(秒)(hms(时间)ЮЮЮ)
#id总时间
#
#1 1 680
#2 2 678
假设您使用的是data.table
,另一种选择可能是使用它的ITime
类,该类是基于秒的:dt[,time:=as.ITime(time)]
dt[,max(time)-min(time),id]
@Henrik从未听说过那个类。每天学习更多,谢谢!
library(dplyr)
library(lubridate)
df %>%
group_by(id) %>%
summarise(total_time = sum(diff(seconds(hms(time)))))
# id total_time
# <int> <dbl>
#1 1 680
#2 2 678