如何使用 purrr 或 tidyr 将数据框列表转换为列表数据框?

How can I convert a list of data frames into a data frame of lists using purrr or tidyr?

这个问题好像以前有人回答过,但我没有找到任何准确的答案。我有一个数据框列表,我想将其转换为包含两列的数据框——IDdataID应该是一列整数,data应该是一列数据框。这是一个数据框列表的玩具示例,我想将其转换为具有两行(每个唯一 ID 一个)和两列(ID数据):

library(tidyverse)
library(purrr)

list <- list(tibble(ID = rep(1, 4),
                    a = c(1, 2, 3, 4), 
                    b = c(4, 3, 2, 1)),
             tibble(ID = rep(2, 3),
                    c = c(4, 5, 6),
                    d = c(6, 5, 4))
           )

这似乎是 tidyr::unnest 的工作,但我使用该功能的努力没有成功:

df <- unnest(list, cols = ID)
#> Error in UseMethod("unnest") : 
#>  no applicable method for 'unnest' applied to an object of class "list"

我也无法使用 tibble 实现我的目标:

df <- tibble(list, .rows = ID)
#> Error in tibble_quos(xs[!is.null], .rows, .name_repair) : 
#>  object 'ID' not found

如何将我的数据框列表转换为列表数据框,最好使用 purrrtidyr

如果我正确理解你想要的输出,你可以这样做

list %>% map_df(~.x %>% nest(cols=-ID))

由于nest 需要data.frame,您需要映射列表中的数据框来进行映射。然后map_df最后将所有的东西合为一个data.frame。