0

对于每个相同的 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 是给定结束日期的时间十进制版本。

任何帮助将不胜感激。

4

1 回答 1

0

您可以使用值为7lead来获取下一个值。time.decimaldefault

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))
于 2021-04-04T03:02:38.800 回答