Может быть более гибко работать с парой функций из dplyr
и purrr
.dplyr::bind_rows
может принимать список фреймов данных, и они могут иметь разные имена, тогда как база rbind
работает только с 2 фреймами данных одновременно.bind_rows
также имеет аргумент .id
, который создаст столбец с именами элементов списка.purrr::map_dfr
вызывает функцию над списком и возвращает фрейм данных, все из которых связаны строкой;поскольку он охватывает bind_rows
, он также имеет аргумент .id
.
Доступ к настройке этих идентификаторов полезен, поскольку у вас есть 2 набора идентификаторов: один из дат и один из вызовов против пут.Установка одного идентификатора во внутреннем bind_rows
и одного в map_dfr
приводит к обоим.
Записано с помощью функции, чтобы ее было немного легче увидеть:
library(quantmod)
AAPL.2015 <- getOptionChain("AAPL", "2019/2021")
aapl_df <- purrr::map_dfr(AAPL.2015, function(d) {
dplyr::bind_rows(d, .id = "type")
}, .id = "date")
head(aapl_df)
#> date type Strike Last Chg Bid Ask Vol OI
#> 1 Sep.27.2019 calls 140 79.50 9.50 77.60 77.90 10 30
#> 2 Sep.27.2019 calls 145 75.85 0.00 72.70 73.30 NA 28
#> 3 Sep.27.2019 calls 150 72.22 0.00 67.85 67.90 10 91
#> 4 Sep.27.2019 calls 155 52.53 0.00 65.80 69.90 NA 10
#> 5 Sep.27.2019 calls 160 60.10 0.00 57.85 58.15 2 11
#> 6 Sep.27.2019 calls 165 54.40 15.95 52.65 52.90 9 16
Или вболее распространенный dplyr
трубопровод с сокращенной записью функции:
library(dplyr)
aapl_df <- AAPL.2015 %>%
purrr::map_dfr(~bind_rows(., .id = "type"), .id = "date")