根据使用首日的同类群组

时间:2019-06-18 08:12:26

标签: r dplyr transform

我想根据我的应用数据集中用户首次观察的月份来建立同类群组。可以说,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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只需将带有同类群组标签的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))