在 R 中将列表拆分为单独的数据框

Vai*_*ngh 3 r dplyr purrr tidyverse

所以我有一个列表如下,我想要的是将它们分成三个单独的数据帧(名称为香蕉/草莓和苹果),如预期输出所示。我已经看到了这个(将列表拆分为数据帧 R),但它与我想要的完全相反。我不想组合然后我想将它们分成三个与列表标题同名的数据框。

list_a <- list(`Banana` = c(8.7), `Strawberry` = c(2.3), `Apple` = c(3.5))
Run Code Online (Sandbox Code Playgroud)

DF1

Banana
8.7
Run Code Online (Sandbox Code Playgroud)

DF2

Strawberry
2.3
Run Code Online (Sandbox Code Playgroud)

DF3

Apple
3.5
Run Code Online (Sandbox Code Playgroud)

任何最好在 Tidyverse 中的解决方案都将不胜感激。实际问题在列表中有更多的列。

al-*_*ien 6

首先将它们全部转换为 tibble:

list_a <- list(`Banana` = c(8.7), `Strawberry` = c(2.3), `Apple` = c(3.5))
list_a <- purrr::map(list_a, tibble::as_tibble)
Run Code Online (Sandbox Code Playgroud)

然后将其发送到全局环境:

list2env(list_a, envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)


akr*_*run 5

我们可以使用imap来获取名称,然后使用set_names

library(purrr)
library(dplyr)
library(stringr)
imap(list_a, ~ set_names(tibble(.x), .y)) %>%
        set_names(str_c("DF", 1:3)) %>% 
        list2env(.GlobalEnv)

DF1
# A tibble: 1 x 1
#  Banana
#   <dbl>
#1    8.7
DF2
# A tibble: 1 x 1
#  Strawberry
#       <dbl>
#1        2.3
DF3
# A tibble: 1 x 1
#  Apple
#  <dbl>
#1   3.5
Run Code Online (Sandbox Code Playgroud)

如果我们需要单独的列

library(tibble)
enframe(list_a) %>% 
     unnest(c(value)) %>% 
     group_split(rn = row_number(), keep = FALSE) %>%
     set_names(str_c("DF", 1:3)) %>% 
     list2env(.GlobalEnv)
DF1
# A tibble: 1 x 2
#  name   value
#  <chr>  <dbl>
#1 Banana   8.7
DF2
# A tibble: 1 x 2
#  name       value
#  <chr>      <dbl>
#1 Strawberry   2.3
DF3
# A tibble: 1 x 2
#  name  value
#  <chr> <dbl>
#1 Apple   3.5
Run Code Online (Sandbox Code Playgroud)