我想生成一个数据帧,hminput,来自不同较小数据帧的3个参数(名为frqAFR,frqAMR,..等,如下所示)。因此,不是单独编写所有代码来提取每个代码的三列,然后按列进行绑定,然后按行进行绑定,我想知道是否可以使用带有列表中字符串的for循环来优化它。 / p>
所以,到目前为止,这是我的想法:
listpop<-c("frqAFR","frqAMR","frqEUR","frqEAS","frqSAS","frqAFROURU","frqIND")
for (g in listpop) {
hminput<- rbind(cbind(paste(g)["SNP"],paste(g)["POP"],paste(g)["MAF"]))
}
但它会生成一个包含三个NA的hminput数据帧。 有什么想法吗?谢谢!
期望的输出:
hminput
snp1 pop1 maf1
snp2 pop2 maf2
snp3 pop3 maf3
...
答案 0 :(得分:1)
我们需要获取数据集对象的值。假设'listpop'字符串是data.frame对象名称,使用list
获取mget
中的值,然后将列“SNP”,“POP”,“MAF”和{ {1}} rbind
元素
list
如果我们使用hminput <- do.call(rbind, lapply(mget(listpop), function(x) x[c("SNP", "POP", "MAF")]))
循环
for
如果我们正在寻找有效的解决方案,那么可以使用hminput <- c()
for(g in listpop) {
hminput <- rbind(hminput, get(g)[c("SNP", "POP", "MAF")])
}
中的rbindlist
data.table
如果我们需要使用library(data.table)
rbindlist(lapply(mget(listpop), `[`, c("SNP", "POP", "MAF")))
tidyverse