Как разбить вложенный список на фрейм данных, где каждый встроенный список становится отдельным столбцом? - PullRequest
2 голосов
/ 27 февраля 2020

Моя цель - взять вложенный список следующим образом:

list1 <- list(1,2,3,4,5)
list2 <- list(6,7,8,9,10)
list3 <- list(11,12,13,14,15)

nested_list <- list(list1, list2, list3)

и создать фрейм данных с количеством столбцов = количеством списков, встроенных во вложенный список. Другими словами, я пытаюсь получить списки list1, list2 и list3, помещенные в отдельные столбцы фрейма данных.

Я пытался использовать некоторые функции из tidyr, такие как "unnest_wider", но мне не повезло. Большинство функций построены так, чтобы превращать каждый вложенный список в наблюдение (строку), а не в столбцы. Я знаю, что мог бы сделать что-то вроде l oop, но такой подход не очень эффективен.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я бы go

as.data.frame(do.call(cbind, nested_list))
1 голос
/ 27 февраля 2020

Если вы посмотрите на unclass(df) с любым data.frame, вы увидите, что (несмотря на атрибуты) data.frame в основном уже имеет вашу структуру данных. Зная это, нам нужно только unlist списки внутри списка.

В однострочнике:

as.data.frame(lapply(nested_list, unlist))
#>   c.1..2..3..4..5. c.6..7..8..9..10. c.11..12..13..14..15.
#> 1                1                 6                    11
#> 2                2                 7                    12
#> 3                3                 8                    13
#> 4                4                 9                    14
#> 5                5                10                    15

Или использовать tidyverse:

library(tidyverse)
as_tibble(nested_list, .name_repair = "universal") %>% 
  unnest(everything())
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> # A tibble: 5 x 3
#>    ...1  ...2  ...3
#>   <dbl> <dbl> <dbl>
#> 1     1     6    11
#> 2     2     7    12
#> 3     3     8    13
#> 4     4     9    14
#> 5     5    10    15

Причина, по которой имена столбцов являются беспорядочными, заключается в том, что элементы списка не имеют имен. Если бы у них были имена, вы бы увидели, что они станут именами столбцов в обоих решениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...