Присвоить имена столбцов в списке фреймов данных со значениями NA - PullRequest
0 голосов
/ 08 мая 2019

Я работаю с данными об акциях и пытаюсь получить информацию о предыдущей торговой дате, чтобы узнать цену закрытия и другую информацию.Пока мой код получен только в предыдущий день, поэтому он не работает должным образом в понедельник, потому что он ищет информацию в воскресенье (не активный день для акций).

Для репликации:

library(quantmod)

list_symbols_sample <- c("GLBS", "SBOT", "ACHV", "TTNP", "AVCO", "CCCL")

research_days_sample <- structure(c(17966, 17963, 17949, 17928, 17924, 17898), class = "Date")

stocks_df_sample <- lapply(list_symbols_sample, function(x) tryCatch(getSymbols(x, auto.assign = FALSE),error = function(e) { }))

Это код, который я использую, и его результат:

stocks_OHLCV_previous_day <- list()

for (i in 1:3) {
    trade_date_temp <- as.Date(research_days[i]-1)
    OHLCV_temp <- stocks_df_sample[[i]][trade_date_temp]
    stocks_OHLCV_previous_day[[i]] <- data.frame(OHLCV_temp)
}

stocks_OHLCV_previous_day
[[1]]
[1] GLBS.Open     GLBS.High     GLBS.Low      GLBS.Close    GLBS.Volume   GLBS.Adjusted

    <0 linhas> (ou row.names de comprimento 0)

    [[2]]
               SBOT.Open SBOT.High SBOT.Low SBOT.Close SBOT.Volume SBOT.Adjusted
    2019-03-07      1.29      1.29     1.05        1.2       54300           1.2

    [[3]]
               ACHV.Open ACHV.High ACHV.Low ACHV.Close ACHV.Volume ACHV.Adjusted
    2019-02-21      1.58      1.82     1.55       1.79      145500          1.79

И вот что мне нужно:

stocks_OHLCV_previous_day
        [[1]]
        [1]          GLBS.Open GLBS.High GLBS.Low GLBS.Close GLBS.Volume GLBS.Adjusted
        2019-03-08      3.34      5.34     3.25       4.44     2941900          4.44

        [[2]]
                   SBOT.Open SBOT.High SBOT.Low SBOT.Close SBOT.Volume SBOT.Adjusted
        2019-03-07      1.29      1.29     1.05        1.2       54300           1.2

        [[3]]
                   ACHV.Open ACHV.High ACHV.Low ACHV.Close ACHV.Volume ACHV.Adjusted
        2019-02-21      1.58      1.82     1.55       1.79      145500          1.79

Любые советы, как решить эту проблему?

1 Ответ

1 голос
/ 08 мая 2019

Вот решение с использованием пакетов bizdays и lubridate. Чтобы получить документацию bizdays, перейдите по адресу https://cran.r -project.org / web / packages / bizdays / bizdays.pdf .

Вам нужно будет создать календарь для вашей страны. Я думаю, что в пакете bizdays есть несколько предустановленных, но я не проверял. Тот, который используется в документации, предназначен для Бразилии, поэтому я использовал его.

Чтобы решить эту проблему, я изменил только первую строку вашего цикла.

library(bizdays)
library(lubridate)

cal <- create.calendar("Brazil/ANBIMA", holidaysANBIMA, weekdays=c("saturday", "sunday"))

for (i in 1:3){
  trade_date_temp <- adjust.previous((research_days_sample %m-% days(1)), cal)[i]
  OHLCV_temp <- stocks_df_sample[[i]][trade_date_temp]
  stocks_OHLCV_previous_day[[i]] <- data.frame(OHLCV_temp)}
> stocks_OHLCV_previous_day
[[1]]
           GLBS.Open GLBS.High GLBS.Low GLBS.Close GLBS.Volume GLBS.Adjusted
2019-03-08      3.34      5.34     3.25       4.44     2941900          4.44

[[2]]
           SBOT.Open SBOT.High SBOT.Low SBOT.Close SBOT.Volume SBOT.Adjusted
2019-03-07      1.29      1.29     1.05        1.2       54300           1.2

[[3]]
           ACHV.Open ACHV.High ACHV.Low ACHV.Close ACHV.Volume ACHV.Adjusted
2019-02-21      1.58      1.82     1.55       1.79      145500          1.79
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...