我想根据我的应用数据集中用户首次观察的月份来建立同类群组。可以说,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
答案 0 :(得分:1)
使用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
答案 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))