2017-06-09 11 views
1

データフレーム、hminputを、異なる小さなデータフレーム(frqAFR、frqAMR、..など)から3つのパラメータで生成します。だから、それぞれの3つの列を抽出するコードを別々に書くのではなく、列ごとにバインドして行ごとにバインドするのではなく、リストから文字列を含むforループを使ってビットを最適化できるかどうかは疑問でした。データフレーム名の中に文字列を含むRループ

だから、ここに私の考えは、これまでのところです:

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"])) 
       } 

しかし、それは3 NASとのhminputのデータフレームを生成します。 考えていますか?ありがとう!

所望の出力:

hminput 

snp1 pop1 maf1 
snp2 pop2 maf2 
snp3 pop3 maf3 
... 
+0

を使用する必要がある場合、私は実際にあなたの入力構造がどのようなものであるかを取得し、何をFOR-でそれをやっているしませんでしたループ。しかし、あなたは 'rbind'に' hminput'が必要だと感じています。何かのように、 'rbind(hminput、cbind(paste)(g).....' ??)これを行うためのより効率的で簡単な方法があると確信しています。 –

答えて

1

私たちは、DataSetオブジェクトの値を取得する必要があります。 「listpop」文字列はdata.frameオブジェクト名であると仮定すると、その後、列「SNP」、「POP」、「MAF」、およびrbindlist要素

hminput <- do.call(rbind, lapply(mget(listpop), function(x) x[c("SNP", "POP", "MAF")])) 
のサブセット mgetを使用して listの値を取得します

我々は、効率的な解決策を探しているなら、我々は、その後、forループ

hminput <- c() 
for(g in listpop) { 
    hminput <- rbind(hminput, get(g)[c("SNP", "POP", "MAF")]) 
} 

を使用している場合data.tableからは

library(data.table) 
rbindlist(lapply(mget(listpop), `[`, c("SNP", "POP", "MAF"))) 

を使用することができ、我々はtidyverse

​​
+1

ありがとう、DIが使えました!最初の1つ。 – melunuge92

関連する問題