2016-02-26 130 views
2

我正在使用R,試圖找出每年有4個季度數據的平均值。R中每年屬於平均季度

我首先從在線抓取數據,將數據轉換爲時間序列對象,選擇我想要的時間幀,轉換爲一個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個季度的滾動平均值,而不是每個日曆年產生一個平均值。任何人都知道修復?

+0

也許這有助於'窗口(DATA1,2000,C(2014,4))%>%as.xts()%>%as.data.frame()%>%GROUP_BY(GRP = (%)%>%summary(Mean = mean(V1))' – akrun

+0

如果你想要年平均值,'window(data1,2000,c(2014,4))%>%as.xts()% >%as.data.frame()%>%group_by(grp = sub('\\ s +。*','',row.names(。)))%>%summarize(Mean = mean(V1))' – akrun

回答

0

只是通過使用apply.yearly來檢查我們是否獲得了滾動平均值。將'xts'對象轉換爲data.frame,使用傳統組'year'和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 
+0

您分享的第一種方法適用於我。然而,第二個方法,我用的是一個給了我不同的結果... [,1] 2000 Q1 1.300000 2001年Q1 1.425000 2002年Q1 2.175000 2003 Q1 2.525000 2004年Q1 1.775000 2005年第一季度1.700000 2006年第一季度1.550000 2007年第一季度2.125000 2008年第一季度1.900000 2009年第一季度1.800000 2010年第一季度1.800000 2011年第一季度1.550000 2012年第一季度1.925000 2013 Q1 1.500000 2014 Q1 1.250000 2014 Q4 1.966667 –

+0

@EliasAyoub的第二個方法是完全一樣的一個,你的表現帖子。你可以嘗試'as.xts()%>%xts :: apply.yearly(mean)'以防函數被其他函數掩蓋。 – akrun

+0

@EliasAyoub我使用'xts_0.9-7','dplyr_0.4.3',以防版本與此有關。 – akrun