是否有更好更好的方法将具有混合内容的命名列表转换为数据框?
工作示例:
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)
是否可以一步完成此转换?
答案 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创建