数据框中的堆栈列表列

mar*_*abe 2 r

我有以下数据框与列表列:

a <- data.frame(col1=c("a","b","c"))
a$col2 <- list(list(),list(name="Michal", age=28), list(name="Johnny", age=31))
Run Code Online (Sandbox Code Playgroud)

我想将这些列合并为一个数据框,以便所需的输出看起来像数据框下面:

  col1   name     age
1  a     NA       NA
2  b     Michal   28
3  c     Johny    31
Run Code Online (Sandbox Code Playgroud)

用于将列表列转换为我正在使用的数据帧

plyr::ldply(a$col2, data.frame)
or
lapply(a$col2, data.frame, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它会在第一个位置跳过空列表:

   name   age
1 Michal  28
2  Johny  31
Run Code Online (Sandbox Code Playgroud)

有没有任何技巧,如何保持这个空列表进一步cbind().

akr*_*run 6

这是一个选项 data.table

library(data.table)
setDT(a)[, unlist(col2, recursive = FALSE), col1][a[, "col1", with = FALSE], on = .(col1)]
#   col1   name age
#1:    a     NA  NA
#2:    b Michal  28
#3:    c Johnny  31
Run Code Online (Sandbox Code Playgroud)

如果我们需要一个tidyverse选项

library(tidyverse)
a$col2 %>% 
    set_names(a$col1) %>% 
    Filter(length, .) %>% 
    bind_rows(., .id = "col1") %>% 
    left_join(a[1], .)
#   col1   name age
#1    a   <NA>  NA
#2    b Michal  28
#3    c Johnny  31
Run Code Online (Sandbox Code Playgroud)