Если вы не после скользящего среднего, вы можете сделать:
n_splits <- 5
transform(
data,
mean_X2 = ave(X2, ceiling(seq_along(X2)/n_splits), FUN = mean)
)
Идея состоит в том, что вы получаете только 4 различных значения (каждое для 1 среза из 5 строк):
X1 X2 mean_X2
1 1 0.2450328 0.4765226
2 2 -0.2485971 0.4765226
3 3 0.1073639 0.4765226
4 4 1.6354394 0.4765226
5 5 0.6433740 0.4765226
6 6 1.6846952 0.4854171
7 7 -1.9208249 0.4854171
8 8 0.9209313 0.4854171
9 9 0.2554107 0.4854171
10 10 1.4868733 0.4854171
11 11 1.4396200 -0.4308499
12 12 -1.4503835 -0.4308499
13 13 -0.1566408 -0.4308499
14 14 -1.5484536 -0.4308499
15 15 -0.4383918 -0.4308499
16 16 0.6936388 1.0445175
17 17 0.1052725 1.0445175
18 18 0.9264836 1.0445175
19 19 1.8322978 1.0445175
20 20 1.6648948 1.0445175
Данные:
set.seed(3243)
X2 <- runif(20, -2, 2)
X1 <- c(1:20)
data <- cbind(X1, X2)