複数列のデータテーブルに対して rollapply 関数を使用したいと思います。つまり、各列を独立して使用できるようにしたいと考えています。たとえば、次のデータブルを考えてみましょう。
> DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
> DT
x y v
1: a 1 1
2: a 3 2
3: a 6 3
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9
次に、rollapply をローリング サブセットとして使用して、列 2 と 3 の 3 つの要素のローリング平均を計算し、それらを外部変数に保存したいと思います。
> r1= NA; r2 = NA
> ft=function(x) { r1=mean(x[,2,with=FALSE]) ; r2=mean(x[,3,with=FALSE]) }
> rollapply(DT, width=3, ft)
Error in x[, 2, with = FALSE] : incorrect number of dimensions
便利ではないこのエラーが発生したことを除いて、なぜ機能しないのですか?
出力は次のようになります。
> r1
[1] 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333 3.333333
> r2
[1] 2 3 4 5 6 7 8