合并R中的两个以上列表

时间:2015-09-25 13:00:59

标签: r merge

基本上,我想将多个列表合并到一个列表中。所有列表具有相同的结构。这是一个例子:

file1=list(A=1,B=2)
file2=list(A=2,B=3)
file3=list(A=3,B=4)

我知道mapply()Map()有效。

> mapply(c, file1, file2, file3, SIMPLIFY=FALSE)
[[1]]
[1] 1 2 3

[[2]]
[1] 2 3 4

但问题是我实际上有500个列表,好吧,我可以确保将对象名称复制和粘贴500次。但是,我想学习如何有效地做到这一点。我有一个包含每500个列表名称的向量,如下所示,

lsNames=c("file1","file2","file3")

但我不知道如何开始,感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:6)

这是一个替代方案,通过构建然后评估OP中显示的同一个mapply()调用来工作:

do.call(mapply, c(FUN=c, sapply(lsNames, as.symbol), SIMPLIFY=FALSE))
# $A
# file1 file2 file3 
#     1     2     3 
# 
# $B
# file1 file2 file3 
#     2     3     4 

答案 1 :(得分:1)

我不确定这是否是您所追求的,但我已经编写了一个代码,可以将您从列表中转移到一个data.frame。

library(plyr)

file1 = list(A = 1, B = 2)
file2 = list(A = 2, B = 3)
file3 = list(A = 3, B = 4)

lsNames = c("file1", "file2", "file3")

# defining new list
my_list <- list()

# getting data from your objects file_1...file_n to new list
for(lsName in seq_along(lsNames)){

  my_list[[lsName]] <- unlist(get(lsNames[lsName]))
}

# list to data.frame
my_df <- 
  ldply(my_list)

my_final_df <- 
  cbind(my_df, lsNames) 

# a look at result
my_final_df

  A B lsNames
1 1 2   file1
2 2 3   file2
3 3 4   file3