Вот способ использования .colMeans()
, который дает желаемый результат.
dat <- data.frame(x=c(.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))
> .colMeans(x = dat$x, m = 3, n = nrow(dat)/3, na.rm = T )
[1] 0.2 0.5 0.8
тестирование на большем data.frame
:
> dat <- data.frame(x = rnorm(15000))
>
> # Start timer
> tic()
> w <- .colMeans(x = dat$x, m = 3, n = nrow(dat)/3, na.rm = T )
>
> # End timer
> toc()
0.01 sec elapsed
>
> print(length(w))
[1] 5000
Это немного быстрее, чем метод, предложенный db:
> tic()
> w2 <- aggregate(. ~ grp, transform(dat, grp = ceiling(seq_along(x)/3)), mean)
> toc()
0.1 sec elapsed