2017-06-09 4 views
1

Ich möchte einen Datenrahmen, hminput, mit 3 Parametern aus verschiedenen kleineren Datenrahmen (mit dem Namen frqAFR, frqAMR, .. etc, wie Sie unten sehen können) generieren. Also, anstatt den ganzen Code separat zu schreiben, um die drei Spalten jedes einzelnen zu extrahieren und dann nach Spalte und danach nach Zeile zu binden, habe ich mich gefragt, ob ich es ein wenig mit einer for-Schleife mit Strings aus einer Liste optimieren könnte.R-Schleife mit Strings innerhalb eines Datenrahmens Name

So, hier ist meine Idee so weit:

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

Aber es erzeugt einen hminput Datenrahmen mit drei nationalen Agenturen. Irgendwelche Gedanken? Vielen Dank!

gewünschte Ausgabe:

hminput 

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

ich nicht, was wie Ihre Eingabestruktur ist und was Sie es in for- tun Schleife. Aber ich glaube, du brauchst den 'hminput' dort in' rbind'. So etwas wie 'rbind (hminput, cbind (paste (g) .....' ?? und ich bin mir sicher, dass es effizientere und einfachere Methoden gibt. –

Antwort

1

Wir müssen den Wert der Daten-Set-Objekte erhalten. Unter der Annahme, dass die 'listpop' Strings die data.frame Objektnamen sind, erhalten Sie die Werte in einem listmget verwenden, dann Teilmenge der Spalten "SNP", "POP", "MAF" und rbind die list Elemente

hminput <- do.call(rbind, lapply(mget(listpop), function(x) x[c("SNP", "POP", "MAF")])) 

Wenn wir mit der for Schleife

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

Wenn wir für eine effiziente Lösung suchen, dann rbindlist von data.table kann

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

Und verwendet werden, wenn wir verwenden müssen, tatsächlich bekommen haben tidyverse

library(tidyverse) 
mget(listpop) %>% 
     map(~.[c("SNP", "POP", "MAF")] %>% 
     bind_rows() 
+1

Danke, es hat funktioniert !!: DI hat sich entschieden zu verwenden der erste. – melunuge92

Verwandte Themen