将 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
我并没有故意删除日期列,因此您可以检查发生了什么。
我为多个参与者(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
我并没有故意删除日期列,因此您可以检查发生了什么。