我有一个值向量:
[1] 0 0 4 1 0 0 -1 1 1 0 -1 0 0 -2 0 0
[17] 1 2 0 2 0 1 1 1 0 1 -1 0 0 0 0 0
[33] 0 2 0 4 -2 0 0 -1 1 0 0 0 -1 -2 2 0
[49] -1 0 -1 0 3 0 0 -1 1 0 0 0 1 -3 0 -1
[65] 0 -1 0 1 1 0 1 -2 1 1 0 0 -1 -2 0 0
[81] 0 2 0 0 1 1 0 0 0 -1 -2 0 -1 -1 -1 -1
[97] 1 1 0 1
我想获得每10步的平均值(此时前10个数的平均值),从而产生具有这些平均值的新向量。由于原始向量中有100个值,因此将给出长度为10的新向量(10个平均值)。
我知道我可以使用以下方式访问每个第10点的号码:
result <- my_vector[seq(1, length(my_vector), 10)]
但我需要在该步骤中前10个点的平均值,而不仅仅是数字本身。
答案 0 :(得分:2)
colMeans(matrix(x, 10))
[1] 0.4 0.7 0.8 0.2 0.0 0.4 -0.4 -0.4 -0.7 0.1
我们将矢量转换为尺寸与所需长度匹配的矩阵,并使用colMeans
查找每个组的平均值。我们也可以使用rowMeans
,但由于默认情况下矩阵是按列填充的,我们必须添加另一个参数byrow=TRUE
并且可能会因为所有额外的输入而伤害自己。
我们可以通过明确找出一些子集化向量的平均值来测试我们的答案。
#Test
mean(x[1:10])
[1] 0.4
mean(x[11:20])
[1] 0.7
数据强>
x <- c(0, 1, 0, -1, 0, 0, 0, 2, 2, 0, -1, 2, 4, 0, 0, -1, 0, 0, 1,
2, 4, 0, 1, 0, 0, 0, -2, 3, 1, 1, 0, 1, 0, 0, 0, 1, -1, 1, 0,
0, 1, 0, 1, 1, -1, -1, -2, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,
-1, -1, -1, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, -1, -1,
-2, 0, -2, -3, -2, -1, 0, 0, 2, 0, 0, -1, 0, 0, 0, -1, 0, -1,
1, 1, 0, 1)