好的,试试这个:
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
比这更干净的“构建”方式,但最终结果是您想要应用任何函数的“过滤器矩阵”。