1

我正在尝试在点击流数据中指定会话。我根据月份和 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()

我已经为此苦苦挣扎了很长一段时间,因此将不胜感激任何帮助。

谢谢!

4

1 回答 1

1

我们可以cumsum在按“ID”、“月份”分组后的逻辑向量上使用。创建一个逻辑向量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
于 2018-10-15T17:04:11.277 回答