Напишите каждый столбец из каждой цены акций - R Studio - PullRequest
0 голосов
/ 26 мая 2020

Вот коды, которые я начинаю:

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 компаний, этот способ не сработает.

Что я могу сделать для этого?

1 Ответ

0 голосов
/ 26 мая 2020

Не увеличивайте свои объекты в for l oop. Используйте 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', если хотите, чтобы они были в окончательном выводе.

...