Когорты на основе первого дня использования - PullRequest
0 голосов
/ 18 июня 2019

Я хочу построить когорты на основе месяца первого наблюдения за пользователем в наборе данных моего приложения.Скажем, январь 2018 года был первым месяцем моего периода наблюдения.

Я пробовал что-то вроде этого (... не работает):

da_app = group_by(da, userid) %>%
  mutate(cohort= min(day))

Пример данных:

da_app <- data.frame(userid = c(1,1,2,2), day = c("2019-02-20","2019-02-21","2018-03-11","2018-03-12"))
da_app
  userid        day
1      1 2019-02-20
2      1 2019-02-21
3      2 2018-03-11
4      2 2018-03-12

Я хотел бы иметь это:

da_app2
  userid        day cohort
1      1 2019-02-20     14
2      1 2019-02-21     14
3      2 2018-03-11      3
4      2 2018-03-12      3

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Просто конвертируйте substr в factor с когортными метками без дополнительных library с.В любом случае вам, вероятно, понадобятся когортные факторы.

da_app$cohort <- factor(substr(da_app$day, 6, 7), labels=c(14, 3))
da_app
#   userid        day cohort
# 1      1 2019-02-20     14
# 2      1 2019-02-21     14
# 3      2 2018-03-11      3
# 4      2 2018-03-12      3

Данные

da_app <- structure(list(userid = c(1, 1, 2, 2), day = structure(c(3L, 
4L, 1L, 2L), .Label = c("2018-03-11", "2018-03-12", "2019-02-20", 
"2019-02-21"), class = "factor")), class = "data.frame", row.names = c(NA, 
-4L))
1 голос
/ 18 июня 2019

Используя dplyr и lubridate, вы можете сделать:

df %>%
 mutate(cohort = interval(ymd("2018-01-01"), ymd(day)) %/% months(1) + 1)

  userid        day cohort
1      1 2019-02-20     14
2      1 2019-02-21     14
3      2 2018-03-11      3
4      2 2018-03-12      3
...