假设我有一个向量
x <- rnorm(100, 0, 1)
我想计算第 1、21、41、61 和 81 个值的平均值。然后是第 2、22、42、62 和 82 个值,依此类推。直到我有一个 20 个值的最终向量。
有没有办法用基础 R 做到这一点?
提前谢谢你。
在
将尺寸更改为 20x5 矩阵后,可以使用rowMeans
set.seed(42)
x <- rnorm(100, 0, 1)
rowMeans(matrix(x, nrow = 20))
# [1] 0.48315816 -0.45278238 0.32392765 0.47993455 -0.19808804
# [6] 0.36215278 0.11231354 0.08840571 0.78022995 0.29911804
#[11] 0.48624850 0.32825670 0.49916741 0.03855425 -0.23844465
#[16] -0.21686072 -0.15059661 -0.88259531 -1.73071168 0.23890847
另一种选择是tapply
和rep_len
out <- tapply(x, INDEX = rep_len(1:20, length(x)), mean)
结果
head(out)
# 1 2 3 4 5 6
# 0.4831582 -0.4527824 0.3239276 0.4799346 -0.1980880 0.3621528
您可以使用
sapply
来检查1:20
并将其添加到0:4*20
中,如下所示:
sapply(1:20, function(i) mean(x[i + 0:4*20]))