将 52 周的数据拆分为 12 个月

Split 52 weeks of data into 12 months

我为多个参与者(G1、G2 等)完成了 data.frame 次练习 有不同类型的锻炼课程(Sup、Home 等),每周每种类型有 2 次。 我有一个“周”变量,但我需要按月提供汇总数据,即将 52 周的数据分成 12 个月。 这是示例数据:

qdf = data.frame(id = rep(c("G1", "G2", "G3"), 16),
                 type = c(rep("Sup",24), rep("Home", 24)),
                 week = rep(c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4),2),
                 session = c(rep("S1",3), rep("S2", 3), rep("S3",3), rep("S4",3),
                             rep("S5",3), rep("S6", 3), rep("S7",3), rep("S8",3),
                             rep("H1",3), rep("H2", 3), rep("H3",3), rep("H4",3),
                             rep("H5",3), rep("H6", 3), rep("H7",3), rep("H8",3)))

我目前关于如何做到这一点的想法是,在按 id 分组后,为每个会话分配一个虚拟日期,从会话 S1 和 H1 的 01-01-2020 开始,然后将年份分成几个月基于日期。或者,要添加额外的虚拟行,以便每个 week 有 7 天,然后分配日期并拆分。

我真的不确定如何从这些可能的解决方案开始,或者如果没有更好的方法。

如果您设置起点,例如 2020-01-01,您可以执行以下操作:

qdf <- data.frame(id = rep(c("G1", "G2", "G3"), 16),
                 type = c(rep("Sup",24), rep("Home", 24)),
                 week = rep(c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4),2),
                 session = c(rep("S1",3), rep("S2", 3), rep("S3",3), rep("S4",3),
                             rep("S5",3), rep("S6", 3), rep("S7",3), rep("S8",3),
                             rep("H1",3), rep("H2", 3), rep("H3",3), rep("H4",3),
                             rep("H5",3), rep("H6", 3), rep("H7",3), rep("H8",3)))

library(lubridate)
qdf <- qdf %>% mutate(
  date = ymd("2020-01-01") + weeks(week),
  month = month(date)
)
> head(qdf)
  id type week session month       date
1 G1  Sup    1      S1     1 2020-01-08
2 G2  Sup    1      S1     1 2020-01-08
3 G3  Sup    1      S1     1 2020-01-08
4 G1  Sup    1      S2     1 2020-01-08
5 G2  Sup    1      S2     1 2020-01-08
6 G3  Sup    1      S2     1 2020-01-08

我并没有故意删除日期列,因此您可以检查发生了什么。