R将列创建为另一列的运行平均值

时间:2013-10-09 14:53:38

标签: r performance

我想在R中创建一个列,它只是另一列的所有先前值的平均值。例如:

D
    X
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10

我希望D $ Y是D $ X的先前平均值,即D $ Y是之前所有D $ X观测值的平均值。我知道如何使用for循环移动每一行来做到这一点,但是有更高效的方式吗?

我有一个大型数据集和硬件不能胜任该任务!

谢谢你, 莱恩

1 个答案:

答案 0 :(得分:5)

您可以生成这样的矢量的累积方式:

set.seed(123)
x<-sample(20)
x
## [1]  6 15  8 16 17  1 18 12  7 20 10  5 11  9 19 13 14  4  3  2
xmeans<-cumsum(x)/1:length(x)
xmeans
## [1]  6.000000 10.500000  9.666667 11.250000 12.400000 10.500000 11.571429
## [8] 11.625000 11.111111 12.000000 11.818182 11.250000 11.230769 11.071429
## [15] 11.600000 11.687500 11.823529 11.388889 10.947368 10.500000

所以D$Y<-cumsum(D$X)/1:nrow(D)应该有用。