2017-01-23 2 views
2

Angenommen, ich habe mehrere Datenrahmen, die alle identische Vektornamen haben und ich möchte alle, die ein Commmon-Muster haben. Also für diesen 3-Datenrahmen:rbind Datenrahmen basierend auf einem gemeinsamen Muster in Datenrahmen Name

df.1 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed=runif(10)) 
df.2 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed=runif(10)) 
df.3 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed = runif(10)) 

Ich möchte rbind alles mit dem gemeinsamen Muster

Ich habe versucht, eine Liste erstellen und dann einen Datenrahmen von diesem mit der Erstellung „df *.“:

temp <- lapply(ls(pattern = "df.*"), get) 
temp2<- as.data.frame(temp) 

jedoch nur dies erzeugt einen Datenrahmen von 6 Spalten effektiv das ganze eher als rbinding cbinding.

Antwort

4

Wir ls mit mget

library(data.table) 
rbindlist(mget(ls(pattern = "^df\\.\\d+"))) 

Oder mit dplyr

library(dplyr) 
mget(ls(pattern="^df\\.\\d+")) %>% 
       bind_rows() 

Oder mit rbind von base R

verwenden
do.call(rbind, mget(ls(pattern="^df\\.\\d+"))) 
+0

Perfect, danke. Frage: Warum benutzen Sie '"^df \\. \\ d + "' anstatt '' df. * ''? –

+0

@JojoOno Basierend auf den von Ihnen erstellten Objekten, 'df.1',' df.2', 'df.3' etc, dachte ich, dass die Muster sehr spezifisch wären, zB 'df' am Anfang ('^') von der String, gefolgt von '.' (was ein Metazeichen ist, das bedeutet, dass ein beliebiges Zeichen gefunden werden kann, so dass wir entkommen können, gefolgt von einer oder mehreren Ziffern (' \\ d + '). – akrun

+0

So vermeidet man Möglichkeit, irgendwelche anderen Objekte mit '" df. "' irgendwo in der globalen Umgebung anzuhängen? –

1

Sie können versuchen:

new_df <- do.call("rbind",mget(ls(pattern = "^df.*"))) 
Verwandte Themen