Ich habe einen data.frame ( Link zur Datei ) mit 18 Spalten und 11520 Zeilen, die ich so transformiere:
%Vor%nach system.time () dauert es ungefähr so lange zu laufen:
%Vor%Dieser Aufruf ist Teil einer Webapp, also ist die Laufzeit ziemlich wichtig. Gibt es eine Möglichkeit, diesen Aufruf zu beschleunigen?
Die Verwendung von aggregate
ist ziemlich viel schneller ...
Um nur einige der Punkte aus den Kommentaren zusammenzufassen:
plyr
wurde hauptsächlich für Benutzerfreundlichkeit und nicht für Leistung entwickelt (obwohl die aktuelle Version einige nette Leistungsverbesserungen hatte). Einige der Basisfunktionen sind schneller, da sie weniger Overhead haben. @JDLong zeigte auf einen netten Thread , der einige dieser Probleme behandelt, darunter auch einige spezialisierte Techniken von Hadley. Die Reihenfolge der Daten bei der Berechnung von Medianwerten: Wenn die Daten in der Reihenfolge vom kleinsten zum größten Wert vorliegen, ist die Berechnung etwas schneller.
%Vor%Sortieren Sie die Daten für die neuen Datensätze nach einer entsprechenden Spalte, wenn Sie sie importieren. Für vorhandene Datensätze können Sie diese als Stapeljob (außerhalb der Web-App) sortieren.
Nun, ich habe einfach ein paar einfache Transformationen an einem großen Datenrahmen (dem Baseballdatensatz im plyr-Paket) unter Verwendung der Standardbibliotheksfunktionen (z. B. "Tabelle", "Appell", "Aggregat" usw.) und die analoge plur-Funktion - in jedem Fall fand ich plyr als wesentlich langsamer. Z. B.
%Vor%Zweitens, und ich habe nicht untersucht, ob dies die Leistung in Ihrem Fall verbessern würde, aber für Datenrahmen der Größe, mit der Sie jetzt arbeiten und größer, verwende ich data.table Bibliothek, verfügbar auf CRAN. Es ist einfach, data.table-Objekte zu erstellen und vorhandene data.frames in data.tables zu konvertieren - rufen Sie einfach data.table auf dem data.frame auf, das Sie konvertieren möchten:
%Vor%