どうぞ:
test <- data.frame(one=c(2,2,2,3,4,5,5,6),two=c(3,4,5,1,2,1,2,8))
window.size <- 2
test$window.mean <- ave(
test$two,
findInterval(
test$one,
seq(min(test$one),max(test$one),window.size)
)
)
aggregate(window.mean ~ one, data=test, FUN=head, 1)
one window.mean
1 2 3.250000
2 3 3.250000
3 4 1.666667
4 5 1.666667
5 6 8.000000
これがどのように機能するかを説明するには:
この例で 2 のウィンドウを使用していくつかのカット ポイントを次のように定義するとします。
> seq(min(test$one),max(test$one),2)
[1] 2 4 6
次にfindInterval
、定義されたカット ポイント間のグループにラベルを付けるだけです。
> findInterval(test$one,seq(min(test$one),max(test$one),2))
[1] 1 1 1 1 2 2 2 3
> test$one
[1] 2 2 2 3 4 5 5 6
ave
2 番目の引数で定義されたグループ内の最初の引数の平均を計算するだけです。したがって、 のグループfindInterval
と の値を使用するこの例ではtest$two
、次のようになります。
#groups
[1] 1 1 1 1 2 2 2 3
#values
[1] 3 4 5 1 2 1 2 8
mean(c(3,4,5,1)) = 3.25
mean(c(2,1,2)) = 1.66
mean(c(8)) = 8