r - 从嵌套列表中提取然后 row.bind data.frames

标签 r dataframe nested-lists rbind

我有一个输出大矩阵(Mat1)和小数据帧(Smalldf1)的函数,我将它们存储在名为“Result”的列表中。 该函数在循环内运行,因此我创建了“结果”列表的许多版本,直到循环结束......每次我将它们添加到名为“FINAL”的列表中时。

在循环结束时,我最终得到一个名为 FINAL 的列表,其中有许多较小的“结果”列表......每个列表都包含一个小数据帧和一个大矩阵。

我想将所有小数据帧重新绑定(bind)在一起以形成一个更大的数据帧并将其命名为 DF1 - 我不确定现在如何访问这些数据帧,因为我正在访问列表中的列表..?

这里的类似问题给出了这样的解决方案:

DF1 <- do.call("rbind",lapply(FINAL, function(x) x["Smalldf1"]))

然而,这将输出作为一个名为“Smalldf1”的单列,并带有 Smalldf1 的描述...即,这实际上打印在列列表中(X1 =“xxx”,X2 =“xxx”,X3 =“xxx” “)...我需要将其分解为看起来像原始格式,3 列包含信息...?

任何帮助都会很棒。

最佳答案

我把我的评论变成了答案。这可能是您的数据:

df <- data.frame(X1=1:3, X2=4:6, X3=7:9)
FINAL=list(Result=list(Smalldf1=df, Mat1=as.matrix(df)),
             Result=list(Smalldf1=df+1, Mat1=as.matrix(df+1)))

您可以组合lapply来提取嵌套列表的第一个(或第N个,只需更改1)元素,然后对此结果执行rbind,或者使用 do.call 或使用 dplyr:

#### # Doing it in base R:
do.call("rbind", lapply(FINAL, "[[", 1) )
#### # Or doing it with dplyr:
library(dplyr)
lapply(FINAL, "[[", 1) %>% bind_rows
####   X1 X2 X3
#### 1  1  4  7
#### 2  2  5  8
#### 3  3  6  9
#### 4  2  5  8
#### 5  3  6  9
#### 6  4  7 10

这应该是您预期的结果

警告: 使用 dplyr 的解决方案不适用于旧版本的 dplyr(我在 dplyr_0.5.0 上测试过它,但它在 dplyr_0.2 上返回错误)

关于r - 从嵌套列表中提取然后 row.bind data.frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40082625/

相关文章:

r - ggplot2:向网格添加对角线

r - 如何将数据框分成两列并根据组更有效地计算行数

R:如何根据不同的数据框给数据框中的每个人相同的id号?

python - 我可以检测无限嵌套列表吗?

json - 如何将 JSON 输出提取到数据框?

R read_excel : libxls error: Unable to parse file

r - 使用 R 计算字符串中的连续模式

r - 在数据框中搜索和匹配

r - 如何根据列名将函数应用于特定列?

python - 重构嵌套的 python 列表