如何将固定大小 X 的列列表分隔为 X 不同的列?

How to separate a column list of fixed size X to X different columns?

我有一个 tibble,其中一列是 list 列,总是 有两个名为 a 和 [=15 的数值=](例如,调用 purrr:map 到 returns 一个 list 的函数的结果,说:

df <- tibble(x = 1:3, y = list(list(a = 1, b = 2), list(a = 3, b = 4), list(a = 5, b = 6)))
df
# A tibble: 3 × 2
  x          y
 <int>     <list>
1     1 <list [2]>
2     2 <list [2]>
3     3 <list [2]>

如何将列表列 y 分成两列 ab,并得到:

df_res <- tibble(x = 1:3, a = c(1,3,5), b = c(2,4,6))
df_res
# A tibble: 3 × 3
  x     a     b
 <int> <dbl> <dbl>
1     1     1     2
2     2     3     4
3     3     5     6

正在寻找类似 tidyr::separate 的东西来处理列表而不是字符串。

使用 dplyr(当前版本:0.7.0):

bind_cols(df[1], bind_rows(df$y))
# # A tibble: 3 x 3
#       x     a     b
#   <int> <dbl> <dbl>
# 1     1     1     2
# 2     2     3     4
# 3     3     5     6

根据 OP 的评论进行编辑:

要将其嵌入到管道中,如果您有许多非列表列,我们可以尝试:

df %>% select(-y) %>% bind_cols(bind_rows(df$y))

我们还可以利用 purrr

中的 map_df
library(tidyverse)
df %>% 
  summarise(x = list(x), new = list(map_df(.$y, bind_rows))) %>%
  unnest
# A tibble: 3 x 3
#      x     a     b
#   <int> <dbl> <dbl>
#1     1     1     2
#2     2     3     4
#3     3     5     6