2013-10-09 64 views
0

我想在R中創建一列,這只是另一列的所有先前值的平均值。例如: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循環來做到這一點,但有沒有更高效的方式?

我有一個很大的數據集和硬件不符合該任務!

謝謝 瑞安

+0

你好,歡迎來到SO。爲了提供一個可重現的例子,你可以使用'reproduce()'。說明在這裏:http://bit.ly/SORepro - [如何使一個偉大的R可重現的例子](http://bit.ly/SORepro) –

+0

@RicardoSaporta:你的意思是'dput'? –

+0

@DavidRobinson不,我的意思是'重現(。)';) –

回答

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)應該工作。

+0

非常感謝,這個工作非常好,當然每個行都會循環播放:) – Ryan

+0

丟失數據怎麼辦? – Thomas

+1

@Thomas好問題。我想不出一種方法來做到這一點,但像'nax <-is.na(x); X [納克斯] < - 0; cumsum(x)/ cumsum(!nax)'應該可以工作。 – mrip