r语言 - 提取该行.从嵌套列表中绑定数据帧



我有一个函数,输出一个大矩阵(Mat1)和一个小数据框(Smalldf1),我将它们存储在一个名为"Result"的列表中。这个函数在循环中运行,所以我创建了许多版本的"结果"列表,直到我的循环结束....每次我都将它们添加到一个名为"FINAL"的列表中。

在我的循环结束时,我结束了一个名为FINAL的列表,其中有许多较小的"结果"列表…每个包含一个小数据框和一个大矩阵。

我想将所有的小数据框绑定在一起,形成一个更大的数据框,并将其称为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。调用或使用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上返回一个错误,例如)

最新更新