我正在尝试在点击流数据中指定会话。我根据月和userId对行进行分组,并尝试创建另一个变量会话,该会话在diff_days列中查找,如果> 0.00209,则增加on,否则保持为先前值。因此,基本上我想创建会话变量并同时使用滞后版本。组中的第一行始终为session = 1。
例如,该数据是group_by中的组之一:
ID Month diff_days
2 0 NA
2 0 0.0002
2 0 0.001
2 0 0.01
2 0 0.00034
2 0 0.1
2 0 0.3
2 0 0.00005
我想在每个组中创建会话变量,如下所示:
ID Month diff_days session
2 0 NA 1
2 0 0.0002 1
2 0 0.001 1
2 0 0.01 2
2 0 0.00034 2
2 0 0.1 3
2 0 0.3 4
2 0 0.00005 4
我使用的代码没有给出正确的答案:
data <- data %>% group_by(ID, Month)
%>% mutate(session = ifelse(row_number() == 1, 1 ,
ifelse(diff_days < 0.0209, lag(session) , lag(session) + 1))) %>% ungroup()
我已经为此苦苦挣扎了很长时间了,因此任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
在按“ ID”,“月”分组后,我们可以在逻辑向量上使用cumsum
。创建一个逻辑向量diff_days[-1] >= 0.00209
(删除了第一个观测值NA
,并附加了TRUE
作为第一个观测值。然后,获取累积和,以便对于每个TRUE值,将其相加1。
data %>%
group_by(ID, Month) %>%
mutate(session = cumsum(c(TRUE, diff_days[-1] >= 0.00209)))
# A tibble: 8 x 4
# Groups: ID, Month [1]
# ID Month diff_days session
# <int> <int> <dbl> <int>
#1 2 0 NA 1
#2 2 0 0.0002 1
#3 2 0 0.001 1
#4 2 0 0.01 2
#5 2 0 0.00034 2
#6 2 0 0.1 3
#7 2 0 0.3 4
#8 2 0 0.00005 4