【发布时间】:2019-05-20 13:55:26
【问题描述】:
我有一个查询数据库并返回两个数据框(df1 和 df2)的列表的函数。如果我在该函数上迭代地应用,我会返回一个包含两个数据框的嵌套列表的列表。
结果列表的结构如下:
#e.g. sample list of lists of 2 data frames
A1 <- data.frame(Value =c("A","B","C"))
A2 <- data.frame(Value =c("1","2","3"))
B1 <- data.frame(Value =c("D","E","F"))
B2 <- data.frame(Value =c("4","5","6"))
C1 <- data.frame(Value =c("G","H","I"))
C2 <- data.frame(Value =c("7","8","9"))
myList <- list( list(df1 = A1, df2 = A2),
list(df1 = B1, df2 = B2),
list(df1 = C1, df2 = C2))
然后我想将数据框组合成它们自己独立的大数据框 - df1_All 和 df2_All。
如何从列表中提取所有 df1 数据框并将它们组合成一个更大的数据框?我在想它会使用 do.call(rbind) 构造和应用于 myList 的 apply 或 map 函数吗?
【问题讨论】:
-
您的预期输出是什么?每个列表是否仅包含 2 个数据框,并且您希望始终交替组合它们?
do.call("rbind", lapply(myList, "[[", 1))和do.call("rbind", lapply(myList, "[[", 2))是你需要的吗? -
purrr::map_dfr(myList, 'df1'),或者使用purrr::pmap(myList, dplyr::bind_rows)同时获得第一和第二 -
预期输出将是由 A1、B1 和 C1 组合(绑定行)组成的数据框和 A2、B2 和 C2 的单独数据框。
-
你能改变你的数据库查询来返回你想要的表吗?
-
@RonakShah - 类似地
do.call(Map, c(rbind, myList))将其全部放回长度为 2 的列表中。