从每个股票价格中写出每一列 - 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'
,也可以包含它们。
这是我开始的代码:
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'
,也可以包含它们。