2013-10-14 33 views
3

apply.quarterly()只給每個季度末月的指數,請看下面的例子:每個季度該指數的第一個月一套適用apply.quarterly後()

library(quantmod) 
getSymbols.FRED("CPILFESL") 
apply.quarterly(CPILFESL,mean) 

     CPILFESL 
1957-03-01 28.60000 
1957-06-01 28.83333 
1957-09-01 29.03333 
1957-12-01 29.26667 
1958-03-01 29.40000 
1958-06-01 29.53333 
... 

什麼我真正想要的是:

 CPILFESL 
1957-01-01 28.60000 
1957-04-01 28.83333 
1957-07-01 29.03333 
1957-10-01 29.26667 
1958-01-01 29.40000 
1958-04-01 29.53333 
... 

那麼我怎麼能設置每個季度的第一個月作爲應用apply.quarterly()後的指數?

感謝

+0

爲什麼你認爲你需要這樣做?可能有更簡單的方法來完成你想要做的任何事情。 –

+0

我有幾個時間系列來處理,其中一些是季度,一些不是。所以,首先我必須按照我在示例中所做的那樣對月度數據進行彙總。但同時我也必須設置相同的開始和結束日期來提取所有時間序列的部分數據。不同的索引方法會導致一些問題(針對不同頻率的數據提取不同數量的觀察值)。您的評論確實讓我更多地考慮了這個問題。我只是調整日期以完成它(特別是:end.date <-2012-3-31,而不是end.date <-2012-01-01).THX! –

+0

即使我通過調整結束日期來完成我的工作,但我仍然認爲,如果可以有一些更一般的方法來執行此操作(如果有的話)用於更一般的目的,可能會有幫助,因爲考慮到那裏在時間序列的索引中仍然存在一些不一致。 –

回答

3

如果xapply.quarterly那麼結果:

time(x) <- as.Date(as.yearqtr(time(x))) 

as.yearqtr來自該quantmod包取決於所以應該已經加載動物園包。

+0

+1,整齊。你可以使用類似的技巧到季度的中間月份嗎?將日期更改爲本月的第一天或最後一天有什麼相似之處? – ricardo

+2

@ricardo,以上與time(x)< - as.Date(as.yearqtr(time(x)),frac = 0)'相同。將季度中的0更改爲0.5或季度末的1。 –

1

我有一幫這樣的問題 - 通常,當我從多個來源合併數據,他們出現了,而最簡單的事情是改變在R總步驟的輸出。

要做到這一點,我有一堆幫手功能。這是一個簡單的功能,可以改變你的月份。

library(quantmod) 
getSymbols("CPILFESL", src = 'FRED') 
qd <- apply.quarterly(CPILFESL,mean) 

monthSwitch <- function(index, monChng) { 
    index_LT <- as.POSIXlt(index) 
    index_LT$mon <- index_LT$mon + monChng 
    as.Date(index_LT) 
} 

index(qd) <- monthSwitch(index(qd), -2) 

了基本的直覺是:改變POSIXlt,直接編輯每月值,然後改回使用as.Date一個簡單的整數日期。

0

也可以編輯xts索引向量本身!

library(xts) 
library(lubridate) 
test_daily <- xts(1:365, Sys.Date()+1:365) 
test_monthly <- apply.monthly(test_daily,mean) 
index(test_monthly) <- floor_date(index(test_monthly),"month") 
test_monthly 

我使用lubridate to convert the dates但我敢肯定有很多其他的方法來編輯索引向量,爲好。

對我來說至關重要的是,即使在xts對象是數據框的情況下,它也可以工作。

我這樣做的原因很簡單,就是得到一個陰謀land where they intuitively belong軸標籤。

相關問題