R

时间:2016-02-26 07:41:33

标签: r mean

我正在使用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)

然而,这似乎产生了每四个季度的滚动平均值,而不是每个日历年产生一个平均值。有人知道修复吗?

1 个答案:

答案 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