然后从嵌套列表中提取 row.bind data.frames
Extract then row.bind data.frames from nested lists
我有一个函数可以输出一个大矩阵 (Mat1) 和一个小数据框 (Smalldf1),我将它们存储在一个名为 "Result" 的列表中。
这个函数在一个循环中 运行 所以我创建了我的 "Result" 列表的许多版本直到我的循环结束....每次我将它们添加到一个名为 "FINAL".[=13 的列表中=]
在我的循环结束时,我得到一个名为 FINAL 的列表,其中有许多较小的 "Result" 列表......每个包含一个小数据框和一个大矩阵。
我想将所有小数据帧绑定在一起以形成一个更大的数据帧并将其称为 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 上对其进行了测试,但 returns 在 dplyr_0.2 上出现了错误)
我有一个函数可以输出一个大矩阵 (Mat1) 和一个小数据框 (Smalldf1),我将它们存储在一个名为 "Result" 的列表中。 这个函数在一个循环中 运行 所以我创建了我的 "Result" 列表的许多版本直到我的循环结束....每次我将它们添加到一个名为 "FINAL".[=13 的列表中=]
在我的循环结束时,我得到一个名为 FINAL 的列表,其中有许多较小的 "Result" 列表......每个包含一个小数据框和一个大矩阵。
我想将所有小数据帧绑定在一起以形成一个更大的数据帧并将其称为 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 上对其进行了测试,但 returns 在 dplyr_0.2 上出现了错误)