基于日期与课程划分同期群:cohort包分组分析问题
解决
cohorts包按课程+日期维度做同期群分析的问题 cohorts包的cohort_table_month函数不支持dplyr::group_by的分组操作,直接通过group_by(COURSE)无法实现按课程拆分同期群的需求。以下是两种可行的解决方案:
方案一:拆分数据集后批量处理
利用group_split按课程拆分数据,对每个子集单独执行同期群分析,最后合并结果并添加课程标识:
library(dplyr) library(cohorts) library(purrr) # 按课程拆分数据集并逐个生成同期群表 course_cohorts <- df %>% group_split(COURSE) %>% map_dfr(function(sub_df) { cohort_table_month(sub_df, id_var = ID, date = DATE) %>% mutate(COURSE = unique(sub_df$COURSE)) }) # 查看结果 print(course_cohorts)
该方案保留了cohort_table_month函数原生的输出格式,同时新增了课程维度的区分。
方案二:手动构建复合同期群标识
如果需要更灵活的自定义逻辑,可以手动生成「课程+首次选课月份」的复合同期群键,再计算留存周期:
library(dplyr) library(lubridate) # 预处理数据:提取月份、生成同期群和周期 df_processed <- df %>% mutate(month = floor_date(DATE, "month")) %>% group_by(ID, COURSE) %>% mutate(cohort = first(month)) %>% # 每个用户-课程的首次选课月份作为同期群 ungroup() %>% mutate(cohort_period = interval(cohort, month) %/% months(1)) # 计算与同期群的间隔月份 # 统计每个同期群-周期的独立用户数 cohort_analysis <- df_processed %>% group_by(COURSE, cohort, cohort_period) %>% summarise(user_count = n_distinct(ID)) %>% ungroup() # 查看结果 print(cohort_analysis)
这种方式可以完全自定义同期群的分组规则,适合复杂的业务场景。
内容的提问来源于stack exchange,提问作者user3670179
相关产品推荐
相关产品推荐

