我正在使用R,试图找出每年每年有4个季度数据的平均值。
我首先从在线抓取数据,将数据转换为时间序列对象,选择我想要的时间范围,转换为xts对象,然后使用apply.yearly()
函数。
library(rvest)
library(xts)
library(magrittr)
inflation <- html("http://www.bankofcanada.ca/rates/indicators/capacity-and-inflation-pressures/inflation/historical-data/")
data1 <- inflation %>%
html_nodes("td:nth-child(2)") %>%
html_text() %>%
as.numeric() %>%
rev() %>% #reverses the order of the vector
na.omit() %>%
ts(frequency = 4, start = c(1993,1))`
clean_canada <- window(data1, 2000, c(2014,4)) %>% #selects a window starting at 2000, ending at period 4 of 2014
as.xts() %>%
apply.yearly(mean)
然而,这似乎产生了每四个季度的滚动平均值,而不是每个日历年产生一个平均值。有人知道修复吗?
答案 0 :(得分:0)
只是检查我们是否使用apply.yearly
获得滚动平均值。转换&#39; xts&#39;反对data.frame
,使用传统的“年”组#39;并summarise
获取mean
。
library(dplyr)
window(data1, 2000, c(2014,4)) %>%
as.xts() %>%
as.data.frame() %>%
group_by(grp = sub("\\s+.*", '', row.names(.))) %>%
summarise(Mean=mean(V1))
# grp Mean
# (chr) (dbl)
#1 2000 1.300
#2 2001 2.100
#3 2002 2.300
#4 2003 2.200
#5 2004 1.600
#6 2005 1.550
#7 2006 1.975
#8 2007 2.125
#9 2008 1.675
#10 2009 1.775
#11 2010 1.725
#12 2011 1.725
#13 2012 1.700
#14 2013 1.250
#15 2014 1.800
apply.yearly
也会提供相同的输出,但返回的index
将是特定年份的最后一个季度。它没有进行任何滚动平均值,并在说明中提到
详细信息:将函数应用于非重叠时间的简单机制 期间,例如每周,每月等。与滚动功能不同 因为这将根据指定的时间段对数据进行子集化 (隐含在调用中),并返回每个句点的值向量 在原始数据中。
window(data1, 2000, c(2014,4)) %>%
as.xts() %>%
apply.yearly(mean)
# [,1]
#2000 Q4 1.300
#2001 Q4 2.100
#2002 Q4 2.300
#2003 Q4 2.200
#2004 Q4 1.600
#2005 Q4 1.550
#2006 Q4 1.975
#2007 Q4 2.125
#2008 Q4 1.675
#2009 Q4 1.775
#2010 Q4 1.725
#2011 Q4 1.725
#2012 Q4 1.700
#2013 Q4 1.250
#2014 Q4 1.800