我有一个输出大矩阵(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/