我试图在点击流数据中指定会话 . 我根据months和userId对行进行分组,并尝试创建另一个变量会话,该会话查看diff_days列,如果那个> 0.00209则增加,否则保持为先前的值 . 所以基本上我正在尝试创建会话变量并同时使用滞后版本 . 组中的第一行始终是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()
我一直在努力解决这个问题,所以任何帮助都会非常感激 .
谢谢!
1 回答
我们可以在'ID','Month'分组后对逻辑向量使用
cumsum
. 创建一个逻辑向量diff_days[-1] >= 0.00209
(删除第一个观察,即NA
并附加TRUE
作为第一个 . 然后,获取累积总和,以便对于每个TRUE值,它将被添加1 .