функция to.period сохраняет "отсутствующие значения" - PullRequest
0 голосов
/ 01 августа 2020

Очень новичок в R, так что я надеюсь, что никого не расстрою. Собирая фрагменты из онлайн-поиска и используя пакеты Quantmode и purr, у меня есть следующий код для создания фрейма данных xts с именем stocks:

symbols <- c("RYCVX","AJA","IEMG")
start <- as.Date("2006-06-22")
end <- as.Date("2020-07-30")

# collect adjusted column of all symbols in one matrix
stocks <- getSymbols(symbols,src = "yahoo", from = start, to = end, 
                     auto.assign = TRUE, 
                     warnings = FALSE) %>% 
  map(~Ad(get(.))) %>% 
  reduce(merge) %>%
  `colnames<-`(symbols)

Это ежедневно, но я хочу иметь ежемесячную матрицу , но по-прежнему сохраняйте поля NA. Я пробовал эту строку кода:

mstocks <- to.monthly(stocks, indexAt = "last", OHLC = FALSE)

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

Есть ли способ сохранить недостающие значения и получить ежемесячные данные, которые, как и мои ежедневные данные, содержат строки, в которых один символ - NA?

Итак вот что я получаю:

                    RYCX        AJA        IEMG
2018-12-30        29.3045     4.5523     33.2045     <- first date all symbols have data
...
2020-07-30        34.2344     5.6664     12.2234

То, что я получаю теперь с помощью Уолтса:

                     V1
2006-06-30           NA
...
2020-07-29        52.66000

Что мне нужно:

                   RYCX        AJA        IEMG
2006-06-30        29.3045      NA           NA
....
2020-07-30        34.2344     5.6664     12.2234

Все цены составлены

1 Ответ

0 голосов
/ 01 августа 2020

Я предполагаю, что под данными за месяц вы имеете в виду скорректированную цену закрытия в последний торговый день месяца. Чтобы немного упростить код, я использовал auto.assign = FALSE, чтобы getSymbols возвращал объект временного ряда xts, а не помещал его в среду. Я также использовал функцию setNames вместо colnames<-(symbols), которая работает, но несколько непрозрачна. Чтобы преобразовать в ежемесячный, используйте apply.monthly(last), что соответствует последнему дню каждого месяца во временном ряду. Возвращаются данные за все месяцы, включая месяцы с NA в некоторых временных рядах.

library(tidyverse)
library(quantmod) 
symbols <- c("RYCVX","AJA","IEMG")
start <- as.Date("2006-06-22")
end <- as.Date("2020-07-30") 
stocks <- symbols %>% map( ~Ad(getSymbols(.x, src = "yahoo", from = start, to = end,
                             auto.assign = FALSE,
                             warnings = FALSE))) %>%
        reduce(merge) %>% 
        setNames(symbols) %>% 
        apply.monthly(last) 

, что дает:

> stocks
                 RYCVX    AJA     IEMG
 2006-06-30  21.901295  5.810       NA
 2006-07-31  21.892862  6.260       NA
 2006-08-31  22.643713 18.400       NA
 2006-09-29  23.732025 19.250       NA
 2006-10-31  25.284351  6.160       NA
 2006-11-30  25.908657  6.960       NA
 2006-12-29  26.817636 20.900       NA
...