使用cbind将do.call的结果分配给数据框

Assign the results of do.call using cbind to data frames

我想合并多组两个数据框(a & a_1、b & b_1 等)。基本上,我想做 this 问题所要求的。我创建了我的两个数据集的列表:

# create data 
a <- c(1, 2, 3)
b <- c(2, 3, 4)
at0H0 <- data.frame(a, b)

c <- c(1, 2, 3)
d <- c(2, 3, 4)
at0H0_1 <- data.frame(c, d)

e <- c(1, 2, 3)
f <- c(2, 3, 4)
at0H1 <- data.frame(a, b)

g <- c(1, 2, 3)
h <- c(2, 3, 4)
at0H1_1 <- data.frame(c, d)

# create lists of names
names <- list("at0H0", "at0H1")
namesLPC <- list("at0H0_1", "at0H1_1")

# column bind the data frames?
dfList <- list(cbind(names, namesLPC))
do.call(cbind, dfList)

但现在我需要它为每个创建数据框。这个 do.call 函数只是创建一个数据框名称列表。谢谢!

(编辑以生成可重现的代码)

它不是超级简单,但通过对连接函数进行一些编辑,您可以到达那里:

joinfun <- function(x) do.call(cbind, unname(mget(x,inherits=TRUE)))
lapply(Map(c, names, namesLPC), joinfun)
#[[1]]
#  a b c d
#1 1 2 1 2
#2 2 3 2 3
#3 3 4 3 4
# 
#[[2]]
#  a b c d
#1 1 2 1 2
#2 2 3 2 3
#3 3 4 3 4

Map 函数根据需要对数据集名称进行配对:

Map(c, names, namesLPC)
#[[1]]
#[1] "at0H0"   "at0H0_1"
#
#[[2]]
#[1] "at0H1"   "at0H1_1"

然后 lapply 循环遍历上述 listmget 的每个部分(多次获取)每个对象组合成 list。像这样,对于第一部分:

unname(mget(c("at0H0","at0H0_1"),inherits=TRUE))
#[[1]]
#  a b
#1 1 2
#2 2 3
#3 3 4
#
#[[2]]
#  c d
#1 1 2
#2 2 3
#3 3 4

最后,do.call(cbind, ...) 将这个合并的 list 放回一个 data.frame:

do.call(cbind, unname(mget(c("at0H0","at0H0_1"),inherits=TRUE)))
#  a b c d
#1 1 2 1 2
#2 2 3 2 3
#3 3 4 3 4

我想出了一个办法。几点说明:我有360个数据集需要合并,所以是i in 1:360。这也从数据集名称数组中命名数据集(即dataNames

for (i in 1:360){
  assign(paste(dataNames[i], sep = ""), cbind(names[[i]], namesLPC[[i]]))
}