在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")))))