使用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
手段不同。你知道为什么吗?
答案 0 :(得分:2)
您可以从Date
和aggregate
中提取季度和年份信息:
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