You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于日期与课程划分同期群: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:25:17