【问题标题】:How can I calculate the mean for specific values from a vector?如何计算向量中特定值的平均值?
【发布时间】:2019-11-26 04:07:52
【问题描述】:
假设我有一个向量
x <- rnorm(100, 0, 1)
我想计算第 1、21、41、61 和 81 个值的平均值。然后是第 2 个、第 22 个、第 42 个、第 62 个和第 82 个值,依此类推。直到我得到一个包含 20 个值的最终向量。
有没有办法用基础 R 做到这一点?
提前谢谢你。
【问题讨论】:
标签:
r
vector
sequence
mean
【解决方案1】:
您可以使用sapply 覆盖1:20 并将其添加到0:4*20,例如:
sapply(1:20, function(i) mean(x[i + 0:4*20]))
【解决方案2】:
将尺寸更改为 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