上の膨大なデータに対して累積和を算出したいことってあると思います。ある日からの経過日数ごとの累積売上額とか。組み込み関数レベルでサポートされていません。累積和を求める方法を検討してみました。今回はこんな感じのデータを扱います。dataaa11000000000ba28000000000ab24000000000ab13000000000bb210000000000aa22000000000ac15000000000ba17000000000bb19000000000ac260000000001列目と2列目がキーになっていて、3列目が順番、4列目が値です。キーが同じデータに関して、3列目が2の場合は1の値と2の値を足す、ということがしたいです。頑張ってみる今までは無理矢理こんな感じでやっていました。cumsum.pig(a,a,1,1000000000)(a,a,2,3000000000)(a,b,1,3000000000)(a,b,2,7000000000)(a,c,1,5000000000)(a,c,2,11000000000)(b,a,1,7000000000)(b,a,2,15000000000)(b,b,1,9000000000)(b,b,2,19000000000)うん、問題なく算出できてますね。このやり方には2つの問題点があります。みたいに外部プログラムにデータを渡すことのできる仕組みです。コーディングしなくてもいいので、手軽に自由度の高い処理を実装することが可能です。累積和を算出するコードを書くとこんな感じでしょうか。cumsum.pl例えば次のように実行すればインストールできます。使い方はこんな感じです。-k3naa11000000000aa23000000000ab13000000000ab27000000000ac15000000000ac211000000000ba17000000000ba215000000000bb19000000000bb219000000000ポイントはキーと順番でソートすることです。利用する上での基本ですね。適用しようと思うと次のようになります。程度あるデータでも所望の値が得られたので大丈夫だと思いますUDFないの?ここまで書いていて思ったんですが、公式でサポートされていなくても誰かがUDFを書いてそうですよね。JIRAただ、詳細はこちらってかいてあるとこのリンクを辿ろうとしてもアクセスできなかったので、今はもう手に入らないのかもしれません。使ったものと同じだと思います。Rが使えるフリをするための1冊の本「R言語逆引きハンドブック」を読んだ※このエントリーははてなダイアリーから移行したものです。(a_bicky)都内のソフトウェアエンジニア。使ったサービス開発に従事。っぽいこともやったり。R言語上級ハンドブック共著者。