【问题标题】:Cohorts based on first day of usage基于使用第一天的队列
【发布时间】:2019-06-18 08:12:26
【问题描述】:

我想根据我的应用数据集中第一次观察用户的月份来构建同类群组。假设 2018 年 1 月是我观察期的第一个月。

我已经尝试过这样的事情(......不工作):

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

【问题讨论】:

  • 14, 3 作为群组名称背后的逻辑是什么?

标签: r dplyr transform


【解决方案1】:

使用dplyrlubridate,您可以:

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

【讨论】:

    【解决方案2】:

    只需将 substr 转换为 factor 并使用群组标签,无需额外的 librarys。无论如何,您可能需要同类群组因素。

    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))
    

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 2012-04-30
      • 2010-10-12
      • 2021-05-17
      相关资源
      最近更新 更多