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