преобразовать именованный список со смешанным содержимым во фрейм данных - PullRequest
0 голосов
/ 09 ноября 2018

Есть ли лучший и лучший способ преобразовать именованный список со смешанным содержимым во фрейм данных?

Рабочий пример:

my_list <- list("a" = 1.0, "b" = "foo", "c" = TRUE)

my_df <- data.frame(
  "key" = names(my_list),
  stringsAsFactors = F
)

my_df[["value"]] <- unname(my_list)

Возможно ли сделать это преобразование за один шаг?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать dplyr::as_tibble, чтобы привести список в фрейм данных / таблицу. Это автоматически создаст фрейм данных, в котором имена списка являются именами столбцов, а элементы списка соответствуют строкам.

library(dplyr)
library(tidyr)

my_list <- list("a" = 1.0, "b" = "foo", "c" = TRUE)

as_tibble(my_list)
#> # A tibble: 1 x 3
#>       a b     c    
#>   <dbl> <chr> <lgl>
#> 1     1 foo   TRUE

Чтобы изменить форму в имеющийся у вас формат двух столбцов, передайте его в tidyr::gather, где имена столбцов по умолчанию - это ключ и значение. Из-за различных типов данных в столбце value это приведет все значения к символу.

as_tibble(my_list) %>%
  gather()
#> # A tibble: 3 x 2
#>   key   value
#>   <chr> <chr>
#> 1 a     1    
#> 2 b     foo  
#> 3 c     TRUE

Создано в 2018-11-09 пакетом Представление (v0.2.1)

0 голосов
/ 09 ноября 2018

Мы можем использовать stack от base R

stack(my_list)

Согласно ?stack

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


Или с enframe

library(tidyverse)
enframe(my_list) %>% # creates the 'value' as a `list` column
   mutate(value = map(value, as.character)) %>% # change to single type
   unnest 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...