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

如何将R中52周的运动session数据拆分归类为12个月的汇总数据?

R语言周维度课程数据按月拆分汇总方案

推荐实现方案(对应思路1,高效无冗余)

核心逻辑是直接为每节课程分配虚拟日期,无需生成冗余的天级数据,天然支持跨月周的拆分统计。
需先加载依赖包:

library(dplyr)
library(lubridate)

完整处理代码:

# 1. 为每节课程匹配虚拟日期
processed_df <- qdf %>%
  # 同周同课程类型下的2节课程排序
  group_by(type, week) %>%
  mutate(session_idx = dense_rank(session)) %>%
  ungroup() %>%
  mutate(
    # 按要求第1周起始日期为2020-01-01
    week_start = ymd("2020-01-01") + weeks(week - 1),
    # 每周2节课程间隔2天分配日期,可根据实际开课间隔调整天数
    course_date = week_start + days(2 * (session_idx - 1)),
    # 提取归属月份,需要数字月份可删除label参数
    month = month(course_date, label = TRUE, abbr = FALSE)
  )

# 2. 按月维度汇总,可根据需求调整汇总指标
monthly_summary <- processed_df %>%
  group_by(month, id, type) %>%
  summarise(
    # 示例统计指标:每人每月每类课程上课次数
    attend_count = n(),
    # 可新增其他汇总逻辑
    .groups = "drop"
  )

思路2实现(天级扩展)

如果后续有天维度的统计需求,可以用该方案,提前生成周全量天级映射表:

# 生成1-52周天级日期映射
week_day_map <- tibble(week = 1:52) %>%
  mutate(week_start = ymd("2020-01-01") + weeks(week - 1)) %>%
  rowwise() %>%
  mutate(date = list(seq.Date(week_start, week_start + days(6), by = "1 day"))) %>%
  unnest(date) %>%
  mutate(month = month(date, label = TRUE, abbr = FALSE))

# 关联原数据后汇总,需按课程去重避免重复计数
monthly_summary2 <- qdf %>%
  left_join(week_day_map, by = "week") %>%
  distinct(id, type, session, month) %>%
  group_by(month, id, type) %>%
  summarise(attend_count = n(), .groups = "drop")

方案对比

  • 思路1:性能更好,无冗余数据,单场课程的日期归属更精确,适合仅需按月汇总的场景
  • 思路2:数据冗余度高,适合后续需要按日/周做更多维度统计的场景

内容的提问来源于stack exchange,提问作者Mark Davies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:36:07