我正在使用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)
然而,这似乎每 4 个季度生成一个滚动平均值,而不是为每个日历年生成一个平均值。有人知道修复吗?
只是为了检查我们是否通过使用 apply.yearly
获得滚动平均值。 将"xts"对象转换为data.frame
,使用传统组按"年"和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