2013-02-25 16 views
5

Ich habe in einer Liste von Datensätzen gelesen und diese n aufgerufen. Was ich tun möchte, ist eine Teilmenge der Datensätze von n und Zeile binden sie zusammen in R. Wenn ich versuche, gehen rbind(n) dies gibt mir nur den Datenrahmen aller Namen der Datensätze, anstatt die Elemente tatsächlich setzen jedes Datensatzes untereinander. Ich möchte Teilmengen der Datensätze binden, die einen gemeinsamen Namen haben. Zum Beispiel beginnen 18 der Datensätze mit "4". und ich möchte all diese Dinge miteinander verbinden. Gibt es einen einfachen Weg, dies zu tun?Reihe Binden einer Reihe von Datensätzen?

Antwort

11

Wollen Sie tun ist rbind(n[[1]],n[[2]],...), die nicht das gleiche wie rbind(n) ist.

Sie müssen dies nicht schreiben, können Sie do.call verwenden diese call

do.call(rbind, n) 

zu erstellen und auszuführen, die Sie den gewünschten Befehl ausgeführt werden soll. Dies ist jedoch notoriously slow

Sie rbindlist vom data.table Paket verwenden können, die gleiche Sache viel schneller

library(data.table) 

rbindlist(n) 

Wenn Sie nur die Elemente tun wollen, deren Name mit 4

rbindlist(n[grep(names(n), pattern = '^4')]) 
+0

Ehrfürchtig danke das tut genau das, was ich will! Nun, wie kann ich das für eine Teilmenge tun, sagen Dateien mit "4." Irgendwo in ihrem Namen innerhalb von n ohne wirklich zu schauen welche Nummern in der Liste gehören diese Dateien? – user1836894

+0

@ user1836894 Sind das die Namen der Elemente der Liste? – mnel

+0

Ja, das sind sie. Ich habe eine Liste von Dateien und das sind die Namen, die zu einer Teilmenge der Dateien gehören. – user1836894

1

beginnen Wenn Sie versuchen, viele Dateien zu aggregieren. Möglicherweise benötigen Sie die rbind.fill-Funktion in plyr-Paket (ich don'konw, wenn es eine data.table entspricht)

ll <- list(a=data.frame(x=1,y=2,z=1), 
     b= data.frame(x=2,y=3), 
     c=data.frame(x=3:4,y=5)) 

library(plyr) 
Reduce(rbind.fill,ll[c('a','b')]) ## subset by list names and 
            ## apply recursively using Reduce 
    x y z 
1 1 2 1 
2 2 3 NA 
+0

Ich kenne kein rbind.fill Äquivalent, aber ich habe etwas implementiert http://stackoverflow.com/a/15017231/1385941 – mnel

Verwandte Themen