Teilen Sie einen großen Datenrahmen auf der Grundlage des gemeinsamen Werts in der Spalte in eine Liste von Datenrahmen auf

Ich habe einen Datenrahmen mit 10 Spalten, der Aktionen von "Benutzern" sammelt, wobei eine der Spalten eine ID enthält (nicht eindeutig, identifizierender Benutzer) (Spalte 10). Die Länge des Datenrahmens beträgt ungefähr 750000 Zeilen. Ich versuche, einzelne Datenrahmen zu extrahieren (also 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 für mich an einem kleinen Beispiel (1000 Zeilen) sehr gut:

paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)

und dann zum Beispiel über die Pfade [1] auf das gewünschte Element zuzugreifen.

Beim Anwenden auf den ursprünglichen großen Datenrahmen oder sogar eine Matrixdarstellung wird dadurch mein Computer (4 GB RAM, MacOSX 10.6, R 2.15) gedrosselt und nie fertiggestellt (ich weiß, dass eine neuere R-Version vorhanden ist, glaube aber, dass dies nicht das Hauptproblem ist ).

Es scheint, dass die Aufteilung performanter ist und nach einer langen Zeit abgeschlossen ist, aber ich weiß nicht (unterlegenes R-Wissen), wie ich die resultierende Liste von Vektoren in einen Vektor von Matrizen aufteilen soll.

path = split(smallsampleMat, smallsampleMat[,10]) 

Ich habe auch überlegtbig.matrix usw., aber ohne großen Erfolg, der den Prozess beschleunigen würde.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage