3

私はしばらくRを学ぼうとしてきましたが、まだまともなレベルまで知識がありません。最後にはたどり着きますが、今ピンチで「変身」タイプの簡単な作品を手伝ってもらえないかと思っています。

次のデータ フィールドを持つ 1800 万行の csv データ ファイルがあります: 個人 ID、日付、および値。これは基本的にシミュレーションモデルからのもので、個人が普通預金口座に寄付することをシミュレートしています。

1,28/02/2013,19.49
2,13/03/2013,16.68
3,15/03/2013,20.34
2,10/01/2014,28.43
3,12/06/2014,38.13
1,29/08/2014,68.46
1,20/12/2013,20.51

ご覧のとおり、データには複数の ID が存在する可能性がありますが、個人の日付と寄付額はそれぞれ一意です。

これを改造して、一人一人の年ごとの寄付履歴が残るようにしたいと思います。したがって、たとえば上記は次のようになります。

ID,2013,2014
1,40.00,68.46
2,16.68,28.43
3,20.34,38.13

この問題にどのようにアプローチできるか、大まかなアイデアがあります。年だけでデータの別の列を作成し、ID と年ごとに集計して、各 ID/年のバケットに収まるすべての貢献を合計します。それをRスクリプトに変換する方法すらわかりません。

任意のポインタ/ガイダンスをいただければ幸いです。

どうもありがとうございました。

4

2 に答える 2

3

あなたが説明するアプローチは健全なものです。日付文字列を文字列から日付に前後に変換するには、and strptime( strftimepossible as.POSIXct. 1:yeardata.tablebyddply

library(plyr)
ddply(df, .(ID, year), summarise, total_per_year = sum(value))

dfこれは、基準日が であり、データ内の列が 、および であるとyear仮定IDしていますvalueddply大規模なデータセットの場合、非常に遅くなる可能性があることに注意してください。生のパフォーマンスが本当に必要な場合は、間違いなく で作業を開始することをお勧めしdata.tableます。

于 2013-04-14T11:25:06.987 に答える