我有以下列表:
list_1 <- list(a = 2, b = 3)
list_2 <- list(a=c(5,6), b= c(2,3))
list_3 <- list(a=c(10,5,8,1), b=c(9,6,2,9))
list_4 <- list(a=c(2,5,58), b=c(69,6,23))
mylist <- list(list_1, list_2, list_3, list_4)
names(mylist)<- c("list_1", "list_2", "list_3", "list_4")
现在我想要的是从列表中提取所有 a 和 b 值,并将它们保存为一个 data.frame 与相应的列表名称作为 ID 列,如:
[ID] [a] [b]
[1] list_1 2 3
[2] list_2 5 2
[3] list_2 6 3
[4] list_3 10 9
[5] list_3 5 6
[6] list_3 8 2
[7] list_3 1 9
[8] list_4 2 69
[9] list_4 5 6
[10] list_4 58 23
或作为变量,例如
a
包含所有 a 值,b
包含所有 b 值,和 ID
包含相应的列表 ID:[a]
2 5 6 10 5 8 1 2 5 58
[b]
3 2 3 9 6 2 9 69 6 23
[ID]
"list_1" "list_2" "list_2" "list_3" "list_3" "list_3" "list_3" "list_4" "list_4" "list_4"
我用 for 循环尝试了第二种方法,但无法存档所需的结果。但即使我能做到这一点,我也不知道如何解决 ID 问题。如果解决方案可以是通用的,那就太好了,因为我有许多不同长度的此类列表。
最佳答案
在基础 R 中,您可以遍历 mylist
的名称, 为每个名称生成一个数据框,该名称为 ID
变量和来自 mylist
的相关元素的所有变量.然后您可以将所有生成的数据框与 do.call
组合在一起。和 rbind
:
do.call(rbind, lapply(names(mylist), function(x) data.frame(c(ID=x, mylist[[x]]))))
# ID a b
# 1 list_1 2 3
# 2 list_2 5 2
# 3 list_2 6 3
# 4 list_3 10 9
# 5 list_3 5 6
# 6 list_3 8 2
# 7 list_3 1 9
# 8 list_4 2 69
# 9 list_4 5 6
# 10 list_4 58 23
关于r - 从具有相同向量名称的列表列表中提取所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203648/