将具有混合内容的命名列表转换为数据框

时间:2018-11-09 17:20:58

标签: r dataframe

是否有更好更好的方法将具有混合内容的命名列表转换为数据框?

工作示例:

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 :(得分:10)

我们可以使用stack中的base R

stack(my_list)

根据?stack

  

堆栈函数用于将数据框或列表中作为单独列可用的数据转换为可用于方差模型或其他线性模型分析的单个列。取消堆叠功能可逆转此操作。


或与enframe

library(tidyverse)
enframe(my_list) %>% # creates the 'value' as a `list` column
   mutate(value = map(value, as.character)) %>% # change to single type
   unnest 

答案 1 :(得分:0)

您可以使用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

reprex package(v0.2.1)于2018-11-09创建