У меня достаточно сложный многоуровневый список:
my_list <- list(list(id = 36L, name = "Marathonbet", odds = list(data = list(
list(label = "1", value = "1.25", dp3 = "1.250", american = "-400",
winning = TRUE, handicap = NULL, total = NULL, bookmaker_event_id = "6938899",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "2",
value = "13.75", dp3 = "13.750", american = "1275", winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "6938899",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "X",
value = "7.00", dp3 = "7.000", american = "600", winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "6938899",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC"))))), list(id = 7L,
name = "888Sport", odds = list(data = list(list(label = "1",
value = "1.23", dp3 = "1.230", american = "-435", winning = TRUE,
handicap = NULL, total = NULL, bookmaker_event_id = "1004746417",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "2",
value = "12.50", dp3 = "12.500", american = "1150", winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "1004746417",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "X",
value = "6.50", dp3 = "6.500", american = "550", winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "1004746417",
last_update = list(date = "2018-08-12 13:12:23.000000",
timezone_type = 3L, timezone = "UTC"))))), list(id = 9L,
name = "BetFred", odds = list(data = list(list(label = "1",
value = "1.30", dp3 = NULL, american = NULL, winning = TRUE,
handicap = NULL, total = NULL, bookmaker_event_id = "1085457020",
last_update = list(date = "2018-07-26 08:30:19.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "2",
value = "9.00", dp3 = NULL, american = NULL, winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "1085457020",
last_update = list(date = "2018-07-26 08:30:19.000000",
timezone_type = 3L, timezone = "UTC")), list(label = "X",
value = "5.50", dp3 = NULL, american = NULL, winning = FALSE,
handicap = NULL, total = NULL, bookmaker_event_id = "1085457020",
last_update = list(date = "2018-07-26 08:30:19.000000",
timezone_type = 3L, timezone = "UTC"))))))
Я могу использовать комбинацию map
и map_depth
для устранения уровней вложенности, но я изо всех сил пытаюсь связать ихуровни в кадре данных и сохранить все данные.Например - на уровне my_list[[1]][["odds"]][["data"]]
есть три подсписка.При преобразовании этого уровня в df я получаю только одну строку данных, когда их должно быть 3.
Что я хотел бы сделать, это преобразовать весь этот список во фрейм данных, где общие элементы в подспискахтакие как: my_list[[1]][["odds"]][["data"]][[1]][["bookmaker_event_id"]]
& my_list[[2]][["odds"]][["data"]][[1]][["bookmaker_event_id"]]
появляются в том же столбце в результирующем df.
Это кажется легким достижением, но я либо получаю пропущенные строкиданные или Error: Argument 1 must have names
.Результирующий фрейм данных из этого списка тестов должен иметь 9 строк и около 13 столбцов.
Я хотел бы использовать семейство функций map
и избегать циклов, пожалуйста.