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

Time differences for multiple entries for same ID in R

对于每个相同的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-20-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))