Zusammenfassen von Datenrahmen unter Beibehaltung der ursprünglichen Reihenfolge auf einfache Weise

8

Ich habe Probleme, einen Datenrahmen zu aggregieren, während ich die Gruppen in ihrer ursprünglichen Reihenfolge belasse (Reihenfolge basierend auf dem ersten Auftreten im Datenrahmen). Ich habe es geschafft, es richtig zu machen, aber ich hoffte, dass es einen einfacheren Weg gibt.

Hier ist ein Beispieldatensatz, an dem gearbeitet werden soll:

%Vor%

Einige zu beachtende Punkte: Es gibt zwei Auswahlspalten, um festzulegen, wie die Daten gruppiert werden. Sie werden gleich sein und ihre Namen sind bekannt. Ich habe nur zwei zusätzliche Spalten in diese Daten eingefügt, aber es könnte mehr geben. Ich habe den Spalten Namen gegeben, die mit 'sel' und 'add' beginnen, um es einfacher zu machen, aber die eigentlichen Daten haben andere Namen (also sind grep tricks cool, sind sie hier nicht nützlich).

Was ich versuche, ist, den Datenrahmen basierend auf den Spalten 'sel' in Gruppen zusammenzufassen und alle Spalten 'add' zusammenzufassen. Dies ist einfach genug mit aggregate wie folgt:

%Vor%

Das Problem ist, dass das Ergebnis von den 'sel' Spalten geordnet wird; Ich möchte es basierend auf dem ersten Auftreten jeder Gruppe in den Originaldaten geordnet.

Hier sind meine besten Versuche, diese Arbeit zu machen:

%Vor%

Während diese mir das richtige Ergebnis gaben, hoffte ich, dass jemand eine einfachere Lösung aufzeigen könnte. Es wäre vorzuziehen, wenn die Lösung mit den Paketen arbeitet, die mit der Standard-R-Installation geliefert werden.

Ich habe mir die Dokumentation für aggregate und match angeschaut, aber ich konnte keine Antwort finden (ich habe auf etwas wie einen "keep.original.order" -Parameter für aggregate gehofft ).

Jede Hilfe wäre sehr willkommen!

Update: (falls jemand darüber stolpert)

Hier ist der sauberste Weg, den ich finden könnte, nachdem ich ein paar Tage mehr versucht habe:

%Vor%     
Edward 08.08.2012, 19:09
quelle

3 Antworten

1

Ein bisschen schwer zu lesen, aber es gibt Ihnen, was Sie wollen, und ich habe einige Kommentare hinzugefügt, um zu klären.

%Vor%

Die Ausgabe sieht so aus

%Vor%     
Backlin 08.08.2012, 19:29
quelle
5

Es ist kurz und einfach in data.table . Es gibt standardmäßig die Gruppen in der ersten Reihenfolge zurück.

%Vor%

Bei großen Datenmengen ist das schnell, daher müssen Sie Ihren Code später nicht ändern, wenn Geschwindigkeitsprobleme auftreten. Die folgende alternative Syntax ist der einfachste Weg, um anzugeben, nach welchen Spalten gruppiert werden soll.

%Vor%

oder, by kann auch eine einzelne durch Komma getrennte Zeichenfolge mit Spaltennamen sein:

%Vor%     
Matt Dowle 15.08.2012 11:38
quelle
0

Auf der Suche nach Lösungen für das gleiche Problem habe ich eine neue gefunden, die aggregate () verwendet, aber zuerst die Auswahlvariablen als Faktoren in der gewünschten Reihenfolge konvertiert.

%Vor%

Die Ausgabe ist:

%Vor%

Damit es für das erste Auftreten jeder Kombination beider Variablen geordnet ist, benötigen Sie eine neue Variable:

%Vor%

gibt die Ausgabe:

%Vor%

Mit dieser Lösung müssen Sie kein neues Paket installieren.

    
Alfonso Gar 19.03.2018 10:41
quelle

Tags und Links