2017-10-23 3 views
0

Ich möchte zwei Datenrahmen aus Variablenliste mit For-Schleife kombinieren. Ich verwende folgenden Code zum Erstellen und Kombinieren von Datenrahmen spaltenweise.Aufruf mehrerer Variablen mit For-Schleife

tu1<-data.frame(c(1,2,3),c(2,5,6)) 
tu2<-data.frame(c(5,5,37),c(21,52,61)) 
Consolidate<-function(){ 
    tx<-data.frame(0) 
    for(i in :2){ 
    namefile1<-paste("tu",as.character(i),sep = "") 
    tr<-namefile1 
    tx<-data.frame(cbind(tr,tx)) 
    } 
    tx 
} 
+0

Was ist Ihre erwartete Ausgabe? – PoGibas

+0

Ich habe 117 Datenrahmen von tu1 bis tu117. Ich möchte sie spaltenweise kombinieren. – Kalsi

+0

Haben Sie ähnliche Spaltennamen? – Santosh

Antwort

3

Sie können wie unter einem Liner verwenden:

do.call(cbind, mget(ls(pattern="^tu\\d+"))) 

Es wird alle Datenrahmen mit ähnlichen Mustern in Ihrem Fall "tu" kombinieren.

1

Edit:

OP erklärte, dass: "Ich 117 Datenrahmen von TU1 bis tu117 habe ich möchte, dass sie spaltenweise kombinieren". Um dies zu tun er kann:

foo <- grep("tu[1-117]", ls(), value = TRUE) 
tuAll <- do.call(cbind, sapply(foo, function(x) get(x))) 

Alte Antwort:

Ich kann mir nicht vorstellen, warum würden Sie dies so einfach cbind(tu1, tu2) Werke tun wollen. Wenn Sie mehrmals binden möchten, können Sie cbind(tu1, tu2, tu1, tu2) verwenden.

Aber wenn Sie wollen, dass sie binden Schleife (nicht zu empfehlen) ist dies bearbeitete Version Ihrer Consolidate() Funktion:

tu1 <- data.frame(c(1,2,3), c(2,5,6)) 
tu2 <- data.frame(c(5,5,37), c(21,52,61)) 
Consolidate <- function() { 
    for(i in 1:2){ 
     namefile <- paste0("tu", i) 
     if (i == 1) { 
      tx <- get(namefile) 
     } else { 
      tx <- cbind(get(namefile), tx) 
     } 
    } 
    return(tx) 
}