按日期汇总数据

时间:2016-05-09 23:08:24

标签: r

我正在处理以下数据框:

VAL1 <- c("AA", "BB", "CC", "DD", "BB", "DD", "AA", "DD")
D01012016 <- c(2, 4, 2, 6, 8, 8, 12, 4)
D02012016 <- c(3, 3, 2, 1, 1, 2,4, 4)
D03022016 <- c(2, 2, 3, 4, 3, 5, 5, 7)
D05022016 <- c(1, 3, 3, 1, 2,3, 3, 6)
D03032016 <- c(2, 1, 1, 1, 5, 3, 2, 1)
D01042016 <- c(2, 4, 2, 6, 8, 8, 12, 4)
D02042016 <- c(3, 3, 2, 1, 1, 2,4, 4)
D03042016 <- c(2, 2, 3, 4, 3, 5, 5, 7)
D05042016 <- c(1, 3, 3, 1, 2,3, 3, 6)
D05052016 <- c(2, 3, 7, 1, 1, 1, 1, 1)
D23062016 <- c(2, 1, 1, 1, 5, 3, 2, 1)
D05072016 <- c(1, 3, 3, 1, 2,3, 3, 6)
D03082016 <- c(2, 1, 1, 1, 5, 3, 2, 1)
D01092016 <- c(2, 4, 2, 6, 8, 8, 12, 4)
D12092016 <- c(3, 3, 2, 1, 1, 2,4, 4)
D05102016 <- c(2, 1, 1, 1, 5, 3, 2, 1)
D21112016 <- c(2, 4, 2, 6, 8, 8, 12, 4)
D13122016 <- c(3, 3, 2, 1, 1, 2,4, 4)
df <- data.frame(D01012016, D02012016, D03022016,D05022016,D03032016,D01042016,D02042016,D03042016,D05042016,D05052016,D23062016,D05072016,D03082016,D01092016,D12092016,D05102016,D21112016,D13122016)

Colnames是Dddmmyyyy格式的日期,我需要对第一列VAL1中的数据进行分组(VAL的重复值必须保持分开)并将其每月值分组(第二个colnames作为月份名称,数据必须与sum()函数聚合)。 最终数据集必须具有相同的行数(并且所有VAL1必须位于相同位置)并且只有12列(每月一个)

2 个答案:

答案 0 :(得分:0)

这是一个解决方案,使用reshape2(tidyr或reshape也可以使用)包来改造你的数据框和dplyr库来总结你的结果:

df <- data.frame(VAL1, D01012016, D02012016, D03022016,D05022016,D03032016,D01042016,D02042016,D03042016,D05042016,D23062016,D05072016,D03082016,D01092016,D12092016)

library(reshape2)
ndf<-melt(df)
ndf$date<-as.Date(ndf$variable, format="D%d%m%Y")

library(dplyr)
summarize(group_by(ndf, VAL1, cut(ndf$date, breaks ="1 month")), sum(value))

很难使用您的列格式,因此更容易从宽格式转换为长格式。 VAL1来自熔化命令。如果您对季度结果感兴趣,只需从1个月休息时间更改为3个月休息时间。

答案 1 :(得分:0)

以下是使用data.table

的选项
library(data.table)
melt(setDT(df), id.var="VAL1")[, date := as.Date(variable, "D%d%m%Y")][
          ,.(Sum=sum(value)) , by = .(VAL1, grp = cut(date, breaks= "1 month"))]
相关问题