R中相同ID的多个条目的时差



对于每个相同的ID,我想添加一个结束时间,然后计算该用户ID的每个条目之间的时间差。

这是我迄今为止的代码:

user <- user %>% group_by(user$userdata.user_id) %>% arrange(user$hours) %>% mutate(time.interval= user$hours - lag(user$hours, default = first(user$hours))) %>% mutate(time.interval = round(time.interval/86400, digits = 2))

我试图使用diff time((函数,但由于我试图计算具有预设结束日期的时差('02-2020'=7(,我无法获得以下结果:

id hours time.decimal time.interval

123 03:32:12 1.200 3.3 (4.5 - 1.2)

123 12:37:56 4.500 2.5 (7 - 4.5)

140 09:46:33 6.300 0.7 (7 - 6.3)

**注:以上是我想要实现的目标的一个例子。时间间隔列中的7是给定结束日期的时间十进制版本。

如有任何帮助,我们将不胜感激。

您可以使用lead获取time.decimal的下一个值,default的值为7。

library(dplyr)
user %>%
group_by(id) %>%
mutate(time.interval = lead(time.decimal, default = 7) - time.decimal) %>%
ungroup() -> user
df
#     id hours    time.decimal time.interval
#  <int> <chr>           <dbl>         <dbl>
#1   123 03:32:12          1.2           3.3
#2   123 12:37:56          4.5           2.5
#3   140 09:46:33          6.3           0.7

或在data.table:中

library(data.table)
setDT(user)[, time.interval := shift(time.decimal, type = 'lead', fill = 7) - time.decimal, id]

数据

user <- structure(list(id = c(123L, 123L, 140L), hours = c("03:32:12", 
"12:37:56", "09:46:33"), time.decimal = c(1.2, 4.5, 6.3)), 
class = "data.frame", row.names = c(NA, -3L))

最新更新