我想知道如何计算一些数字的累积平均值。我将举一个简单的例子来描述我正在寻找的东西。
我有以下数字
vec <- c(1, 2, 3, 4, 5)如果我计算这些数字的平均值,我会得到3。
现在,如何计算这些数字的累积平均值。
发布于 2013-07-26 21:33:20
与列表的累积和类似,我建议这样:向量x的累积平均值avg将包含从第一个位置到位置i的平均值。
一种方法是计算每个位置的平均值,方法是将所有先前的值相加,然后除以它们的数字。
通过将arithmetic mean的定义重写为递归公式。一个人得到
avg(1) = x(1)和
avg(i) = (i-1)/i*avg(i-1) + x(i)/i; (i > 1)对向量的每个元素(或列表、一维数组或其他名称)计算此表达式,将得到累积平均值。
如果你必须计算非常大或非常多的整数的平均值,这种递归方法会派上用场,如果你必须存储它们的累加和,就会遇到溢出。
示例
在您的示例中
1, 2, 3, 4, 5我们会得到
1, 1.5, 2, 2.5, 3发布于 2017-06-26 21:34:57
这是一个古老的问题,从那以后发生了很多变化。我只是想用一个dplyr answer更新它。dplyr有一个cummean函数,它直接给出向量的累积平均值。
vec <- c(1, 2, 3, 4, 5)
library(dplyr)
cummean(vec)
#[1] 1.0 1.5 2.0 2.5 3.0发布于 2014-08-09 03:35:05
问题:如何在R中创建累积平均值?答:这个答案是由Jim Holtman jholtman@gmail.com提供的,他使用了cumsum()函数和seq_along()函数,所以请阅读它们。但提供的代码清楚地说明了这一点。6、6+ 16、6+ 16 + 8等等
x <- sample(1:20)
x
# [1] 6 16 8 1 17 11 2 19 18 5 15 13 3 20 9 14 7 10 12 4
cumsum(x) / seq_along(x)
# [1] 6.000000 11.000000 10.000000 7.750000 9.600000 9.833333 8.714286
#10.000000 10.888889 10.300000
#[11] 10.727273 10.916667 10.307692 11.000000 10.866667 11.062500 10.823529
#10.777778 10.842105 10.500000https://stackoverflow.com/questions/11074665
复制相似问题