2017-06-01 51 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和你应该很好走。