从每个股票价格中写出每一列 - R Studio

Write each column from each stock prices - R Studio

这是我开始的代码:

mdate <- "2016-01-04"
edate <- "2016-03-09"
tickers <- c("ABG","ACH","ADM","AEG","AEM","AGQ","AGRO","AKOb","APO","ARCO","ASA") # actual tickers should be more than 2000

for(ticker in tickers)
  High_Raw <- cbind(High_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F))

矩阵如你所料 Open_ABG、High_ABG、Low_ABG……Open_ACH、High_ACH……等等。

我想像这样组织这些数据; Open_ABG, Open_ACH... Open_ASA, High_ABG, High ACH.... High_ASA, Low_ABG.....等等在

我知道我可以使用代码;

High_Raw <- cbind(High_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F))[,2] 
Low_Raw <- cbind(Low_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,3]

但是,有错误;由于错误,High_Raw 包含 50 个代码,Low_Raw 包含 100 个代码。由于我尝试导入超过2000家公司的数据,这种方式对这个不起作用。

我该怎么做才能做到这一点?

不要在 for 循环中增加对象。使用 lapply :

library(dplyr)
library(quantmod)

tickers <- c("ABG","ACH","ADM")

data <- do.call(cbind.data.frame, lapply(tickers, function(x) 
               getSymbols(x, from = mdate, to = edate, auto.assign = F)))

然后您可以使用:

data %>% 
  select(contains('Open'), contains('High'), contains('Low'), contains('Close'))

#           ABG.Open ACH.Open ADM.Open ABG.High ACH.High ....
#2016-01-04     66.2     7.87     36.1     67.3     7.91 ....
#2016-01-05     66.7     7.94     35.8     67.1     7.95 ....
#2016-01-06     63.8     7.82     35.7     63.8     7.88 ....
#2016-01-07     56.2     7.40     34.9     57.7     7.52 ....
#2016-01-08     55.8     7.62     34.8     56.5     7.64 ....
#2016-01-11     53.6     7.37     34.5     55.9     7.39 ....
#....

如果您希望在最终输出中包含 'Volume''Adjusted',也可以包含它们。