r - 从具有相同向量名称的列表列表中提取所有值

标签 r

我有以下列表:

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/

相关文章:

r - 使用 LAPACK svd 的负奇异值

r - 检测或阻止调用不存在的函数的函数定义

r - 使用 dplyr 进行汇总 - 一个变量始终位于底部

r - 如何访问 R 中的帮助/文档 .rd 源文件?

r - 如何避免 R 中不必要的 for 循环

r - 计算函数的反函数

根据另一个向量的索引替换向量元素

r - 从列表中提取输出并保存在数据框中

r - 多个用户改变 R Shiny 的 react 值

r - 用空因子聚合但保留行