わかりました、これを試してください:
Rgames: timeseq<-1:5
Rgames: winmat <- outer(timeseq,timeseq,FUN=function(x,y) y>=x &y<=x+2)
Rgames: winmat
[,1] [,2] [,3] [,4] [,5]
[1,] TRUE TRUE TRUE FALSE FALSE
[2,] FALSE TRUE TRUE TRUE FALSE
[3,] FALSE FALSE TRUE TRUE TRUE
[4,] FALSE FALSE FALSE TRUE TRUE
[5,] FALSE FALSE FALSE FALSE TRUE
Rgames: winmat %*% timeseq
[,1]
[1,] 6
[2,] 9
[3,] 12
[4,] 9
[5,] 5
その関数をウィンドウの幅に置き換えれば、すべて設定できると思います。
編集: Thilo のクエリへの応答では、一般的なケースではapply
. 上記のものを考えると、観測値を「timval」と呼びます。
Rgames: timval<-c(3,4,2,6,1)
Rgames: valmat<-timval*t(winmat)
Rgames: valmat
[,1] [,2] [,3] [,4] [,5]
[1,] 3 0 0 0 0
[2,] 4 4 0 0 0
[3,] 2 2 2 0 0
[4,] 0 6 6 6 0
[5,] 0 0 1 1 1
Rgames: apply(valmat,2,median)
[1] 2 2 1 0 0
もう一度編集してください:明らかに私はそこで眠っていました:誰もそれらすべてのゼロに基づく中央値を望んでいません. 投稿する前にもっと考えるべきです。これを追加:
valmat[valmat==0]<- NA
apply(valmat,2, median, na.rm=T)
[1] 3.0 4.0 2.0 3.5 1.0
そして、これよりもクリーンな「構築」方法があると確信して valmat
いますが、最終結果は、任意の関数を適用する「フィルターマトリックス」です。