我想组合两个数据帧(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
函数仅创建数据帧名称的列表。谢谢!
(进行编辑以制作可复制的代码)
答案 0 :(得分:2)
这不是超级简单的方法,但是只需对联接功能进行一点编辑就可以达到:
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
在上述list
的每个部分上循环到mget
(多次获取)每个对象,成为一个组合的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
答案 1 :(得分:0)
我想出了一种方法。一些注意事项:我需要合并360个数据集,这就是i in 1:360
的原因。这也从数据集名称数组(dataNames
)中命名数据集
for (i in 1:360){
assign(paste(dataNames[i], sep = ""), cbind(names[[i]], namesLPC[[i]]))
}