Поскольку вы не представили пример своих данных, я сделал свои собственные. В следующий раз, пожалуйста, не используйте скриншот объекта. Вместо этого используйте dput()
.
library(quantmod)
library(lubridate)
getSymbols(c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'))
tickers <- data.frame(ticker = c('AAPL', 'GOOG', 'MSFT', 'TSLA', 'FB'),
date = sapply(mget(setdiff(ls(),"B")), function(x) as.character(index(x[1,]))))
tickers$open <- NA
tickers$date <- ymd(tickers$date)
. В приведенном выше коде я загружаю данные по нескольким акциям, получаю первую дату данных и использую ее в качестве даты ipo. Я сделал даты в формате даты, используя lubridate
. Это облегчает добавление дат, как вы сказали в комментарии, это невозможно с символами. Однако, если она отформатирована как дата, + 7 перенесет ее на следующий месяц, если дата находится в последний день месяца.
Код ниже очень прост. Я извлекаю тикер, который будет передан аргументу getSymbols
в getSymbols()
. ipo_date
будет передано аргументу from
в getSymbols()
. next_date
составляет 7 дней с даты ipo, все, что меньше 7 дней, не работает.
Я установил auto.assign
на FALSE
, чтобы getSymbols()
не сохранял объект в среде. Это позволяет мне извлечь первую цену открытия, которая всегда находится в первой строке первого столбца, следовательно, [1, 1]
сразу после вызова getSymbols()
.
for (i in 1:nrow(tickers)) {
ticker <- as.character(tickers[i, 'ticker'])
ipo_date <- as.character(tickers[i, 'date'])
next_date <- as.character(tickers[i, 'date']+7)
tickers[i, 'open'] <- getSymbols(ticker, from = ipo_date, to = next_date,
auto.assign = FALSE)[1,1]
}