「ユーザー」のアクションを収集する10列のデータフレームがあり、列の1つにID(一意ではなく、ユーザーを識別する)が含まれています(列10)。データフレームの長さは約750000行です。単一のアクターのアクションを分離するために、「ユーザー」識別子を含む列で分割された個々のデータフレームを抽出しようとしています(データフレームのリストまたはベクトルを取得します)。
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
結果として
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
...)
以下は、小さなサンプル(1000行)で非常にうまく機能します。
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
次に、たとえばpaths [1]を使用して必要な要素にアクセスします。
元の大きなデータフレームまたはマトリックス表現に適用すると、これは私のマシン(4GB RAM、MacOSX 10.6、R 2.15)を窒息させ、完了しません(新しいRバージョンが存在することは知っていますが、これが主な問題ではないと思います)。
分割の方がパフォーマンスが高く、長い時間が経過した後のようですが、結果のベクトルのリストを行列のベクトルに分割する方法がわかりません(Rの知識が劣っています)。
path = split(smallsampleMat, smallsampleMat[,10])
私はbig.matrix
etcの使用も検討しましたが、あまり成功しなかったため、プロセスがスピードアップしました。
dlply(df, .(userid))
持っていたのですsplit
が、の実行時間を含まなくても、それに比べて悪いことがわかりましたrequire(plyr)
、ありがとう、OP!