提取嵌套列表,然后row.bind data.frames(Extract then row.bin

2019-09-26 04:52发布

我有一个输出大矩阵(MAT1)和一个小的数据框(Smalldf1)我将它们存储在一个名为“结果”列表中的功能。 该功能是在循环中运行,所以我创造了我的“结果”列表中的很多版本,直到我的循环结束....每个I将它们添加到一个名为“最后”名单的时间。

在我的循环结束时,我结束了一个被称为最后的名单,有内部许多较小的“结果”名单......每个都包含一个小数据框和一个大型矩阵。

我想rbind所有的小dataframes在一起形成一个更大的数据帧,并调用它DF1 - 我不知道我现在说我的列表中访问列表是如何访问这些..?

在这里一个类似的问题给了这样一个解决方案:

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

然而,这给出的输出作为所谓的“Smalldf1”与Smalldf1的说明...即此单个列中的列的列表是从字面上印刷(X1 =“XXX”,X2 =“XXX”,X3 =“XXX”)。 ..我需要这个爆发看起来像原来的格式,3列房屋的信息......?

任何帮助将是巨大的。

Answer 1:

我把我的意见变成一个答案。 这可能是你的数据:

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例如返回一个错误)



文章来源: Extract then row.bind data.frames from nested lists