在时间序列列表列中使用purrr:map
之后,我将结果显示在一个小标题列表中(我在这里可能有一些错误的术语,但希望该示例可以使事情变得清晰起来)。是否可以在不指定每个列表元素名称的情况下将结果列表中的每一列提取为数据框列?
示例数据:
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))))))
必需的输出(但不必键入每列-实际上,我还有很多):
tmp %>% mutate(x = map(tmp$col3, "x")[[1]],
b = map(tmp$col3, "b")[[1]])
编辑:从那以后,我意识到上面的“手动解决方案”是错误的。 我不确定如何手动提取b,但对于x,应该是:
tmp %>% mutate(x = map_lgl(col3, "x"))
答案 0 :(得分:5)
一种方法可能是先将列表列(col3
)的每一行转换为小标题,然后再嵌套结果
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]>