2017-06-01 33 views
0

我在這裏挺新的,在這裏遇到了一個非常奇怪的問題(就像我自己想的那樣)。我有一列包含所有S & P500代碼(MMM,ABT,ABBV,ACN,ATVI,AYI,ADBE ....)。然後,我執行一些代碼,爲每個代碼請求xts。我不是善於創造的循環,所以我這樣做(第一列由行情的):下載標準普爾500組件的收盤價格

sp500=read.csv(text=getURL("https://raw.githubusercontent.com/datasets/s-and-p-500-companies/master/data/constituents-financials.csv"), header=T) 
n=nrow(sp500) 
for(i in 1:n) { 
    j <- sp500[i,1] 
    getSymbols(j) 
    j=as.data.frame(j)  
} 

,所以我得到了很多的數據集,叫同樣的方式,作爲代號列給出,之前提到過。但問題在於,我有辦法創建一種聚合數據集,由每個數據集中的一個確切列組成。換句話說,我必須拿MMM$MMM.Close並加ABT$ABT.Close等等。

我想,這將是很長的手動,所以我想知道,怎麼可能將代碼逐一處理這些數據集(循環),知道它的名字是從有代價的列?

+0

不確定你的意思。 – AidanGawronski

回答

0

這裏是一個代碼,下載所選代碼的日常關閉價格(貸給@Quant Guy)。我無法打開文件,並不能找到一個免費的可靠的來源(除了維基百科找到所有S & P500指數成份股),所以我手工輸入代號:

library(quantmod) 
    tickers = c("WMT", "MMM","AIG", "AAPL", "KO", 
      "COST", "C", "AMZN", "ICE", "VTR") 

getSymbols(tickers, from = "2010-01-01", to = "2015-12-31") 
P <- NULL 
seltickers <- NULL 

for(ticker in tickers) {  
    tmp = Cl(eval(parse(text = ticker))) ## Cl from quantmod 
    if(is.null(P)){ timeP = time(tmp) } 
    if(any(time(tmp)!=timeP)) next 
    else P = cbind(P, as.numeric(tmp)) 
    seltickers = c(seltickers, ticker) 
} 

P = xts(P, order.by = timeP) 
colnames(P) = seltickers 

只需修改tickers和你應該很好走。