Преобразование ежедневных данных в еженедельные с помощью R

#r #data.table #tidyquant

#r #data.table #tidyquant

Вопрос:

У меня есть ежедневные данные по двум акциям (Apple и Google)

 library(tidyquant)
dt = tidyquant::tq_get(c("AAPL", "GOOG")) %>%
  arrange(symbol, date)
 

Я пытаюсь преобразовать эти данные из ежедневных в еженедельные, используя следующий код

 result = dt %>%
  group_by(symbol) %>%
  tidyquant::tq_transmute(mutate_fun = to.weekly) %>% data.table
result[symbol == "AAPL" amp; date == "2017-02-03"]
 

Каким-то образом результат неверен.
В качестве примера, еженедельные данные для AAPL on 2017-02-03 поступают следующим образом с использованием приведенного выше кода-

    symbol       date    open    high   low close   volume 
1:   AAPL 2017-02-03 32.0775 32.2975 32.04 32.27 98029200 
 

Однако правильный результат должен быть —

    symbol       date     open     high      low  close   volume 
1:   AAPL 2017-02-03  30.2325  32.6225  30.1550  32.2700 999124986   
 

Может ли кто-нибудь мне здесь помочь?

Спасибо!

Ответ №1:

На момент написания: ошибка, см. Выпуск 148 github.

Возможный обходной путь с использованием tidyr, timetk и purrr. Использование timetk для перевода данных в формат xts преобразует данные в weekly и возвращает формат data.frame. Включение nest и unnest из tidyr и map из purrr. data.table не требуется, но печатает данные намного лучше, чем tibbles.

 library(tidyr)
library(timetk)
# library(purrr)

result <- dt %>% 
  group_by(symbol) %>% 
  nest() %>%   
  mutate(data = purrr::map(data, function(x) x %>% 
                             select(date, Open = open, High = high, Low = low, Close = close) %>% 
                             tk_xts(x, select = c(Open, High, Low, Close), date_var = date) %>% 
                             to.weekly %>% 
                             tk_tbl)) %>% 
  unnest(data) %>% 
  rename_with( ~ tolower(gsub("..", "", .x, fixed = T))) %>% 
  rename(date = index)

result %>% 
  data.table %>% 
  filter(date == "2017-02-03")

   symbol       date     open     high     low  close
1:   AAPL 2017-02-03  30.2325  32.6225  30.155  32.27
2:   GOOG 2017-02-03 814.6600 815.8400 790.520 801.49
 

Комментарии:

1. В итоге я использовал lapply and to.weekly , чтобы ускорить его. Библиотека timetk упростила преобразование data.table в xts без особых хлопот. Спасибо.