Количество дней, прошедших с момента последнего действия - PullRequest
1 голос
/ 16 апреля 2019

Я хочу указать количество дней, прошедших с момента последней активности пользователей для анализа оттока.

Я попробовал код, который нашел в соответствующей теме, но он не работает:

da = da %>%
  arrange(dayid) %>%
group_by(dayid) %>%
  mutate(dayssincelastactivity = c(NA, diff(dayid))

Допустим, это данные.active указывает, был ли пользователь активным в этот день.Я хочу добавить переменную dayssincelastactivity, которая указывает количество дней, прошедших с последнего активного дня пользователя.

da <- data.frame(dayid = c(1,2,3,4,5,6,7,8), active = c(1,1,0,0,0,1,1,1), dayssincelastactivity = c(1,1,2,3,4,1,1,1))

da
  dayid active dayssincelastactivity
1     1      1                     1
2     2      1                     1
3     3      0                     2
4     4      0                     3
5     5      0                     4
6     6      1                     1
7     7      1                     1
8     8      1                     1

1 Ответ

1 голос
/ 16 апреля 2019

Создайте переменную группировки, используя cumsum и seq_along каждой группы.

with(da, ave(dayid, cumsum(active == 1), FUN = seq_along))
#[1] 1 1 2 3 4 1 1 1

Вы также можете перевести это как dplyr

library(dplyr)

da %>%
  group_by(group = cumsum(active == 1)) %>%
  mutate(new_val = row_number()) %>%
  ungroup() %>%
  select(-group)

#  dayid active dayssincelastactivity new_val
#  <dbl>  <dbl>                 <dbl>   <int>
#1     1      1                     1       1
#2     2      1                     1       1
#3     3      0                     2       2
#4     4      0                     3       3
#5     5      0                     4       4
#6     6      1                     1       1
#7     7      1                     1       1
#8     8      1                     1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...