Использование lag в mutate () для прокрутки значений вперед для созданного столбца - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь указать сеансы в потоке данных клика.Я группирую строки на основе месяцев и userId и пытаюсь создать другой сеанс переменной, который просматривает столбец diff_days, и увеличивается на on, если это> 0,00209, и в противном случае остается прежним значением.Поэтому в основном я пытаюсь создать переменную сеанса и одновременно использовать версию с задержкой.Первая строка в группе всегда сессия = 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 Ответ

0 голосов
/ 15 октября 2018

Мы можем использовать cumsum на логическом векторе после группировки по «ID», «Месяцу».Создайте логический вектор diff_days[-1] >= 0.00209 (удалили первое наблюдение, которое является NA, и добавили 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...