用于将所有列表元素从数据框列提取到单个列的功能

use*_*372 6 r purrr

在使用purrr:map时间序列列表列之后,我最终得到了一个tibble列表中的结果(我可能在这里有一些错误的术语,但希望这个例子可以清除它).是否可以将结果列表中的每一列提取为数据框列而不指定每个列表元素名称?

示例数据:

tmp <- tibble(col1 = c("A1", "A2") , 
              col2 = c("B1", "B2"), 
              col3 = list(
                  list(x = TRUE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6)))), 
                  list(x = FALSE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6))))))
Run Code Online (Sandbox Code Playgroud)

所需的输出(但无需键入每列 - 实际上我还有更多):

tmp %>% mutate(x = map(tmp$col3, "x")[[1]],
               b = map(tmp$col3, "b")[[1]])
Run Code Online (Sandbox Code Playgroud)

编辑:我已经意识到上面的"手动解决方案"是错误的..我不确定如何手动提取b,但对于x,它应该是:

tmp %>% mutate(x = map_lgl(col3, "x"))
Run Code Online (Sandbox Code Playgroud)

mar*_*dly 5

一种方法是首先将list column(col3)的每一行转换为tibble,然后取消结果

library(tidyverse)
tmp %>% mutate(new_col = map(col3, as_tibble)) %>% unnest(new_col)

#> # A tibble: 2 x 5
#>   col1  col2  col3       x     b                   
#>   <chr> <chr> <list>     <lgl> <list>              
#> 1 A1    B1    <list [2]> TRUE  <data.frame [3 × 2]>
#> 2 A2    B2    <list [2]> FALSE <data.frame [3 × 2]>
Run Code Online (Sandbox Code Playgroud)