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

时间:2016-10-17 09:20:30

标签: r dataframe nested-lists rbind

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

在循环结束时,我最终得到一个名为FINAL的List,里面有许多较小的“Result”列表......每个列表包含一个小数据帧和一个大型Matrix。

我想将所有小数据帧组合在一起形成一个更大的数据帧并称之为DF1 - 我现在不知道如何访问这些我正在访问列表中的列表..?

这里的类似问题提供了这样的解决方案:

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

然而,这会将输出显示为名为“Smalldf1”的单列,其中包含Smalldf1的描述...即字面上打印在列列表中(X1 =“xxx”,X2 =“xxx”,X3 =“xxx “)...我需要这个看起来像原始格式,3列容纳信息......?

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我对答案做出评论。这可能是您的数据:

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或者对此结果执行rbind 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上返回错误)