Ich habe einen Datenrahmen mit 900.000 Zeilen und 11 Spalten in R. Die Spaltennamen und -typen lauten wie folgt:
%Vor%Ich möchte die Zwischensummen berechnen. Zum Beispiel möchte ich die Summen bei jeder Änderung von yname berechnen und Zwischensumme zu allen numerischen Variablen hinzufügen. Es gibt 160 eindeutige Y-Namen, daher sollte die resultierende Tabelle mir die Zwischensumme jedes J-Namens mitteilen. Ich habe die Daten noch nicht sortiert, aber das ist kein Problem, weil ich die Daten so sortieren kann, wie ich will. Unten ist ein Auszug aus meinen Daten:
%Vor% Welche Funktion soll ich hier verwenden? Vielleicht etwas wie SQL group by
?
OK. Angenommen, Ihre Daten befinden sich in einem Datenrahmen namens foo
:
Dann werden die numerischen Spalten in Ihren Daten aggregiert:
%Vor% Das war das Schnipsel von Daten, die Sie in Ihr Q eingeschlossen haben. Ich habe die Formelschnittstelle zu aggregate()
verwendet, was in diesem Fall ein bisschen schöner ist, weil Sie nicht alle Bits foo$
für die Variablennamen benötigen Sie wünschen das Aggregat. Wenn Sie fehlende Daten ( NA
) in Ihrem vollständigen Datensatz haben, müssen Sie ein zusätzliches Argument na.rm = TRUE
hinzufügen, das wie folgt an sum()
übergeben wird:
Oder die plyr
-Bibliothek, die leicht auf andere Datenklassen erweitert werden kann:
Wenn Ihre Daten groß sind und Geschwindigkeit wichtig ist, würde ich die R-Funktion rowsum empfehlen, die viel schneller ist. Ich habe die 3 Methoden angewendet (f1 = aggregiert, f2 = ddply, f3 = tapply), die in den Antworten vorgeschlagen wurden, um es mit f4 = rowsum zu vergleichen, und hier ist, was ich finde:
%Vor%Ich habe meinen Code unten hinzugefügt, wenn jemand genauer erkunden möchte.
%Vor%Es gibt ein R-Paket namens sqldf, mit dem Sie SQL-Befehle in R data.frames verwenden können. Abgesehen davon, wie du schon gesagt hast, wäre GROUP BY nett. Sie können Ihre Daten einfach in einer lokalen MySQL-Datenbank speichern und mit dem Paket RMySQL eine Verbindung zu R herstellen (Sie können auch die meisten anderen DBMS verwenden, aber MySQL ist am einfachsten einzurichten).
Soweit ich das beurteilen kann, ist auch plr ein großartiges Paket. Aber von der Art, wie Sie Ihr Problem mit GROUP BY stellen und vergleichen, denke ich, dass Sie etwas über SQL wissen, daher könnte es für Sie einfacher sein, dies zu verwenden. Es gibt komfortable Funktionen wie dbReadTable, und wenn Ihre Daten größer werden, können Sie nur einen Teil Ihrer Daten auswählen, um Ihre Analyse nur mit dem auszuführen, was Sie wirklich brauchen.