首页 > 解决方案 > 如何根据列名对包含 R 中多个列表的列表进行子集化,并合并到单个列表/数据框中?

问题描述

我有几个具有相同列名的列表。我正在尝试编写一个函数,从所有列表中按列名作为子集,合并到一个数据框中并添加新的列名。例如:

list1<- list(a= c(1:6),
      b= c(4:9),
      c= c(3:8))
list2<- list(a= c(12:17),
      b= c(10:15),
      c= c(11:16))
list3<- list(a= c(2:7),
      b= c(14:19),
      c= c(9:14))
all<- list (list1, list2, list3)
new_column_names<- c("Block1", "Block2", "Block3")

我想对所有列表“a”进行子集化,并以 new_column_names 作为列名合并到一个数据框中。有什么建议么?谢谢!

标签: rlistsubset

解决方案


您不能将它们变成常规的 data.frame,因为这些 a 向量具有不同的长度,而 data.frame 要求所有列的长度相同。

相反,您可以使用以下方法将它们转换为长格式的 data.frame:

stack(setNames(lapply(all, `[[`, "a"), new_column_names))
#    values    ind
# 1       1 Block1
# 2       2 Block1
# 3       3 Block1
# 4       4 Block1
# 5       5 Block1
# 6      12 Block2
# 7      13 Block2
# 8      14 Block2
# 9      15 Block2
# 10     16 Block2
# 11     17 Block2
# 12      2 Block3
# 13      3 Block3
# 14      4 Block3
# 15      5 Block3
# 16      6 Block3
# 17      7 Block3

推荐阅读