使用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
循环遍历上述 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
我想出了一个办法。几点说明:我有360个数据集需要合并,所以是i in 1:360
。这也从数据集名称数组中命名数据集(即dataNames
)
for (i in 1:360){
assign(paste(dataNames[i], sep = ""), cbind(names[[i]], namesLPC[[i]]))
}
我想合并多组两个数据框(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
循环遍历上述 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
我想出了一个办法。几点说明:我有360个数据集需要合并,所以是i in 1:360
。这也从数据集名称数组中命名数据集(即dataNames
)
for (i in 1:360){
assign(paste(dataNames[i], sep = ""), cbind(names[[i]], namesLPC[[i]]))
}