【发布时间】:2013-08-28 08:42:43
【问题描述】:
这其实是一个简单的问题,但我自己也想不出解决办法。
我有一个长度为 100 的向量。现在我想计算每五个元素的平均值。
例如,前五个元素的一个平均值,接下来的五个观察值的第二个平均值,依此类推。
如何在 R 中完成此操作?
【问题讨论】:
-
但是我发现 Ananda Mahto 的建议比链接下的建议更好,因为它更直观
这其实是一个简单的问题,但我自己也想不出解决办法。
我有一个长度为 100 的向量。现在我想计算每五个元素的平均值。
例如,前五个元素的一个平均值,接下来的五个观察值的第二个平均值,依此类推。
如何在 R 中完成此操作?
【问题讨论】:
使用这个:
aggregate(x, by=list(0:(length(x)-1) %/% 5), mean)
【讨论】:
怎么样:
> x <- 1:100
> tapply(x, rep(1:(length(x)/5), each = 5), mean)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 8 13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98
坚持使用rep,但试图满足@Ferdinand.kraft,有一个不太漂亮但仍然非常可读的解决方案:
tapply(x, rep(1:ceiling(length(x)/5), each = 5, length.out = length(x)), mean)
【讨论】:
length(x) 不是 5 的倍数,则会出错。
rep 有一个 length.out 参数,可以很好地与每个参数匹配