我有一个输出大矩阵(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
) 嵌套列表的元素,然后使用 do.call 或 dplyr 对此结果执行 rbind:
#### # 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
这应该是您的预期结果
WARNING:解决方案使用dplyr
不适用于旧版本的 dplyr(我在 dplyr_0.5.0 上测试过它,但它在 dplyr_0.2 上返回错误)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)