我在R中有一个1300个列表的列表。像这样的例子:
Example = list(list(A = 1, B=data.frame(x = 2, y = 2), C="Test"), list(A = 2, B=data.frame(x = 1, y = 2), C="Test2"), list(A = 3, B=data.frame(x = 3, y = 8), C="Test3"))
> Beispiel
[[1]]
[[1]]$A
[1] 1
[[1]]$B
x y
1 2 2
[[1]]$C
[1] "Test"
[[2]]
[[2]]$A
[1] 2
[[2]]$B
x y
1 1 2
[[2]]$C
[1] "Test2"
[[3]]
[[3]]$A
[1] 3
[[3]]$B
x y
1 3 8
[[3]]$C
[1] "Test3"
现在,我需要这样的data.frame
:
rbind(Beispiel[[1]]$B, Beispiel[[2]]$B, Beispiel[[3]]$B)
问题是,它不适用于像
这样的命令 rbind(Beispiel[[1:3]]$B)
知道如何在不命名每个列表的情况下获取data.frame吗?
答案 0 :(得分:3)
使用lapply
遍历列表以提取每个子列表的所需元素:
do.call(rbind, lapply(Example, "[[", "B"))
# x y
#1 2 2
#2 1 2
#3 3 8
答案 1 :(得分:1)
使用purrr
,如果将map
函数传递给字符串(或整数),它将使用它作为提取器来选择具有该索引的节点。此外,如果您使用map_df
,它会将结果强制转换为data.frame,因此您只需要:
library(purrr)
map_df(Example, 'B')
## x y
## 1 2 2
## 2 1 2
## 3 3 8