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