2012-06-24 35 views
3

我有以下代碼:合併getSymbols導致成一個XTS對象

library(quantmod) 
tckrs <- c("TLT", "LQD", "HYG", "SPY", "DBC") 
NumTckrs <- length(tckrs) 
getSymbols(tckrs, from="1900-01-01", to=Sys.Date()) 

# merge to allign the start dates 
MainDF <- merge(Ad(TLT), Ad(LQD), Ad(HYG), Ad(SPY), Ad(DBC), all=FALSE) 

我想不會有重複的股票符號中的最後一行。有誰知道如何做到這一點?

回答

3

將所有數據加載到環境中,然後分別調用Ad併合並它們。另請注意,getSymbols默認返回一個xts對象,因此您的MainDF是一個xts對象,而不是數據框。

library(quantmod) 
# create new environment 
myEnv <- new.env() 
# pull all data and load into myEnv 
getSymbols("TLT;LQD;HYG;SPY;DBC", env=myEnv) 
# eapply calls Ad on each symbol in myEnv and returns a list 
# do.call calls merge with each element returned from eapply as an argument 
MainXTS <- do.call(merge, c(eapply(myEnv, Ad),all=FALSE)) 
+0

尼斯使用的環境。看來getSymbols BEHA vior非常適合這種方法。 –

+0

問題解決了,並且也很酷!非常感謝。 – user1478354

1

約書亞的可能比我更優雅:

res <- do.call(merge, lapply( lapply(tckrs, get) , Ad)) 
3

這是一個代碼行我qmao

library(qmao) 
p <- makePriceFrame(tckrs, prefer='Adjusted', silent=TRUE) 

爲方便起見,PFmakePriceFrame的別名。此外,由於默認情況下,函數將找到並使用「已調整」列(如果存在),您可以省略參數prefer

p <- PF(tckrs) 

您也可以將一堆這些類型的功能

library(FinancialInstrument) 
p <- PF(getSymbols(stock(tckrs, currency("USD")))) 

同樣的,注意,如果您還沒有分配的符號名來tckrs,你可以從他們獲得價格框架。

names(p) 
[1] "TLT" "LQD" "HYG" "SPY" "DBC" 

如果不指定prefer參數,它會查找包含「調整」,然後選擇「關閉」,然後是「中」,那麼價格」一欄。要查看哪一列是被用來做PriceFrame,看看「喜歡」屬性

attr(p, "prefer") 
[1] "Adjusted" 

如果你將數據保存在獨立的環境,PF可以處理爲好。

getSymbols(tckrs, env=myEnv) 
p <- PF(ls(myEnv), env=myEnv) 
+0

qmao是否會在CRAN上發現自己,還是永遠被驅逐到R-Forge? –

+0

感謝@JoshuaUlrich的建議。我想這是關於那個時間的。 – GSee

+0

@JoshuaUlrich它'取決於金融工具,soooo ...也許它被放逐。我認爲我們推遲將金融工具推向CRAN的主要原因是因爲包級文檔需要改進。我也一直在抱着一絲希望,有一天我會有時間把貨幣放在自己的環境中,但我不確定有誰分享這個希望;-)。所以,也許是時候讓他們都在CRAN上。 – GSee