使用汇总函数将月度数据转换为季度数据

时间:2020-08-26 07:31:08

标签: r aggregate

使用aggregate()函数将月度数据转换为季度数据时,我有一个小问题。 我在该主题中进行了大量搜索,并且有很多示例将aggregate()函数与ts()函数结合使用。但是是否有可能适用于简单数据帧?我的意思是让我们采用以下代码:

date<-(seq(as.Date('2000-01-01'),as.Date('2020-04-01'),by = '1 month'))
x<-rnorm(244)
df1<-data.frame(date,x)
aggregate(df1,nfrequency=4,FUN=mean)

aggregate.data.frame中的错误(df1,nfrequency = 4,FUN =平均值): 缺少参数“ by”,没有默认值

您能帮我吗?

更新

我使用了罗纳克(Ronak)提出的代码。

我现在要解决的问题如下:

set.seed(20)
date<-(seq(as.Date('2000-01-01'),as.Date('2020-04-01'),by = '1 month'))
x<-rnorm(244)
df1<-data.frame(date,x)
unlist((df1 %>%   group_by(quarter = quarters(date), year = lubridate::year(date)) %>%   summarise(x = mean(x)) %>%   arrange(year))[,3])[1]
0.7874086 
mean(x[1],x[2],x[3])
1.162685

手段不同。你知道为什么吗?

2 个答案:

答案 0 :(得分:2)

您可以从Dateaggregate中提取季度和年份信息:

df2 <- aggregate(x~quarter + year, transform(df1, 
           quarter = quarters(date), year = as.integer(format(date, '%Y'))), mean)
df2 <- df2[order(df2$year), ]

或使用dplyr

library(dplyr)
df1 %>%
  group_by(quarter = paste(quarters(date), lubridate::year(date))) %>%
  summarise(x = mean(x))

#   quarter        x
#   <chr>      <dbl>
# 1 Q1 2000  0.347  
# 2 Q1 2001 -0.592  
# 3 Q1 2002  0.802  
# 4 Q1 2003  0.237  
# 5 Q1 2004 -0.00882
# 6 Q1 2005  0.0535 
# 7 Q1 2006  0.218  
# 8 Q1 2007  0.177  
# 9 Q1 2008 -0.258  
#10 Q1 2009  0.246  
# … with 72 more rows

答案 1 :(得分:0)

假设您要汇总年份,则如下所示:

date<-(seq(as.Date('2000-01-01'),as.Date('2020-04-01'),by = '1 month'))
x<-rnorm(244)
df1<-data.frame(date,x)
head(df1)

y<-aggregate(list(mean_x=df1$x),                  #gives a name to the aggregated column
             by=list(y=substring(df1$date, 1,4)),  # "by" has to be a list argument including the column you want to use as aggregating variable (here aggregating over the year)
             FUN=mean)

y