Ich habe einen Datenrahmen mit 10 Spalten, in dem Aktionen von "Benutzern" gesammelt werden, wobei eine der Spalten eine ID enthält (nicht eindeutig, Benutzer identifizierend) (Spalte 10). Die Länge des Datenrahmens beträgt ungefähr 750000 Zeilen. Ich versuche, einzelne Datenrahmen zu extrahieren (um eine Liste oder einen Vektor von Datenrahmen zu erhalten), die durch die Spalte mit der Kennung "Benutzer" aufgeteilt sind, um die Aktionen eines einzelnen Akteurs zu isolieren.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
resultierend in
list(
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
,
4 | aad | bb4 | ... | u_002
...)
Folgendes funktioniert bei einer kleinen Stichprobe (1000 Zeilen) sehr gut für mich:
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
und dann zum Beispiel über Pfade [1] auf das gewünschte Element zugreifen.
Wenn Sie auf den ursprünglichen großen Datenrahmen oder sogar eine Matrixdarstellung anwenden, wird mein Computer (4 GB RAM, MacOSX 10.6, R 2.15) erstickt und nie fertiggestellt (ich weiß, dass eine neuere R-Version vorhanden ist, aber ich glaube, dass dies nicht das Hauptproblem ist ).
Es scheint, dass die Aufteilung performanter ist und nach langer Zeit abgeschlossen ist, aber ich weiß nicht (minderwertiges R-Wissen), wie die resultierende Liste von Vektoren in einen Vektor von Matrizen zerlegt werden soll.
path = split(smallsampleMat, smallsampleMat[,10])
Ich habe darüber nachgedacht, auch big.matrix
etc zu verwenden, aber ohne großen Erfolg würde dies den Prozess beschleunigen.
dlply(df, .(userid))
und festgestellt, dass es schlecht ist im Vergleich zusplit
auch ohne die Laufzeit vonrequire(plyr)
, danke und OP!Ab Version 0.8.0
dplyr
bietet eine praktische Funktion namensgroup_split()
:So schließen Sie die Gruppierungsspalte nicht ein:
quelle
Ich bin über diese Antwort gestolpert und wollte eigentlich BEIDE Gruppen (Daten, die diesen einen Benutzer enthalten, und Daten, die alles außer diesem einen Benutzer enthalten). Für die Einzelheiten dieses Beitrags nicht erforderlich, aber ich dachte, ich würde hinzufügen, falls jemand das gleiche Problem wie ich googelt.
So sieht es aus:
quelle