Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将52周的数据分为12个月_R_Date_Dummy Data - Fatal编程技术网

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

R 将52周的数据分为12个月,r,date,dummy-data,R,Date,Dummy Data,我有一个为多个参与者(G1、G2等)完成的训练课程的数据框架 有不同类型的锻炼课程(Sup、Home等),每种类型每周2次。 我有一个“week”变量,但我需要按月提供汇总数据,即获取52周的数据并将其拆分为12个月。 以下是示例数据: qdf = data.frame(id = rep(c("G1", "G2", "G3"), 16), type = c(rep("Sup",24)

我有一个为多个参与者(G1、G2等)完成的训练课程的
数据框架
有不同类型的锻炼课程(Sup、Home等),每种类型每周2次。
我有一个“week”变量,但我需要按月提供汇总数据,即获取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分组后,为每个会话分配一个虚拟日期,从01-01-2020开始,会话S1和H1,然后根据日期将一年分为几个月。或者,添加额外的虚拟行,使每个
周有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
qdf头(qdf)
id类型周会话月日期
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

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

将(ISO)周映射到月取决于年份,不是通用的。您还有其他日期信息吗?@mauritserves每个参与者在52周内的不同时间开始。确切的日期并不重要。我将把第一个大约4.3个星期/ 30天分配给“1个月”等。作为替代,我可以做一些事情,例如QDF%%%突变(月份= CASE(星期)= 48~12,星期>=43~11”等,将4个或5个星期分组为一个月。如果我认为每个星期可以进一步分开,则会有一点准确性。(即S1至S8=第1个月),但这将需要大量代码行作为多个会话类型