R循环,数据框名称中包含字符串

时间:2017-06-09 03:11:25

标签: r string for-loop

我想生成一个数据帧,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
...

1 个答案:

答案 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