r语言 - 创建增量值,并在 ID 中使用条件重新启动



所以我有 2 个字段的数据,ID 和时间戳

ID Time
1 12
1 15
1 16
2 12
2 11
例如,在相同的 ID 中,如果

时间和以前时间之间的差异低于 2,我想增加,除非保持相同的值并在 ID 不同时从 1 重新启动。

期望输出:

ID Time ID_SESSION
1 12 1
1 15 1
1 16 2
2 12 1
2 11 1

在 dplyr/sparklyr 中需要它才能使用 R/实现

使用基数 R 的单行代码,

with(df, ave(Time, ID, FUN = function(i)cumsum(c(TRUE, diff(i) <= 2))))
#[1] 1 1 2 1 2

也许我们需要

library(dplyr)
df1 %>%
   group_by(ID) %>% 
   mutate(ID_SESSION = (lag(c(FALSE, diff(Time) > 2), default= FALSE)) + 1)

或者在带有data.table的单行中

library(data.table)
setDT(df1)[, ID_SESSION := shift(c(FALSE, diff(Time) > 2), fill = FALSE) + 1, ID]
df1
#   ID Time ID_SESSION
#1:  1   12          1
#2:  1   15          1
#3:  1   16          2
#4:  2   12          1
#5:  2   11          1

数据

df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L), Time = c(12L, 15L, 
16L, 12L, 11L)), class = "data.frame", row.names = c(NA, -5L))

最新更新