在R中展平dataframe内的列表列

在R中展平dataframe内的列表列,r,dataframe,data.table,lapply,purrr,R,Dataframe,Data.table,Lapply,Purrr,我有一个包含两列列表的数据框 test <- data.frame(var_1 = c("ONE", "TWO")) test$var_2 <- c(list(data.frame(Date = c("Date 1", "Date 2")), list(data.frame(Date = c("Date 3", "Date 4", "Date 5"))))) test$var_3 <- c(list(data.frame(Name = c

我有一个包含两列列表的数据框

test <- data.frame(var_1 = c("ONE", "TWO"))

test$var_2 <- c(list(data.frame(Date = c("Date 1", "Date 2")), list(data.frame(Date = c("Date 3", "Date 4", "Date 5")))))                   
test$var_3 <- c(list(data.frame(Name = c("Name 1", "Name 2")), list(data.frame(Date = c("Name 3", "Name 4", "Name 5")))))                   

我尝试应用一些建议的解决方案,比如使用这篇文章中的
unnest
,但这并没有给我想要的结果

这里有一个选项,我们
取消列出“var_2”、“var_3”和
unest

library(dplyr)
library(purrr)
library(tidyr)
test %>% 
    group_split(var_1) %>%
    map_dfr(~ .x %>% 
                mutate_at(-1, ~ list(unlist(.))) %>% 
                unnest(c(var_2, var_3)))
# A tibble: 5 x 3
#  var_1 var_2  var_3 
#  <fct> <fct>  <fct> 
#1 ONE   Date 1 Name 1
#2 ONE   Date 2 Name 2
#3 TWO   Date 3 Name 3
#4 TWO   Date 4 Name 4
#5 TWO   Date 5 Name 5

这里有一个选项,我们
unlist
var\u 2'、unest

library(dplyr)
library(purrr)
library(tidyr)
test %>% 
    group_split(var_1) %>%
    map_dfr(~ .x %>% 
                mutate_at(-1, ~ list(unlist(.))) %>% 
                unnest(c(var_2, var_3)))
# A tibble: 5 x 3
#  var_1 var_2  var_3 
#  <fct> <fct>  <fct> 
#1 ONE   Date 1 Name 1
#2 ONE   Date 2 Name 2
#3 TWO   Date 3 Name 3
#4 TWO   Date 4 Name 4
#5 TWO   Date 5 Name 5

使用
数据的选项。表

setDT(test)[, c(.(var_1=var_1), do.call(cbind.data.frame, list(var_2, var_3))), var_1][, 
    (1L) := NULL][]
输出:

   var_1   Date   Name
1:   ONE Date 1 Name 1
2:   ONE Date 2 Name 2
3:   TWO Date 3 Name 3
4:   TWO Date 4 Name 4
5:   TWO Date 5 Name 5
数据:


使用
数据测试选项。表

setDT(test)[, c(.(var_1=var_1), do.call(cbind.data.frame, list(var_2, var_3))), var_1][, 
    (1L) := NULL][]
输出:

   var_1   Date   Name
1:   ONE Date 1 Name 1
2:   ONE Date 2 Name 2
3:   TWO Date 3 Name 3
4:   TWO Date 4 Name 4
5:   TWO Date 5 Name 5
数据:

测试
test <- data.frame(var_1 = c("ONE", "TWO"))

test$var_2 <- c(list(data.frame(Date = c("Date 1", "Date 2")), list(data.frame(Date = c("Date 3", "Date 4", "Date 5")))))                   
test$var_3 <- c(list(data.frame(Name = c("Name 1", "Name 2")), list(data.frame(Name = c("Name 3", "Name 4", "Name 5")))))