R中的累积和,移动平均值和SQL“group by”等效值

问题描述:

在R中创建移动平均值或滚动总和的最有效方法是什么?你如何做滚动功能以及“group by”?R中的累积和,移动平均值和SQL“group by”等效值

虽然动物园是很大的,有时也有更简单的方法。如果数据行为良好并且间距均匀,则embed()函数可以有效地创建多个时间序列的滞后版本。如果您查看VARS软件包进行向量自动回归,您会看到软件包作者选择此路线。

例如,为了计算x ^,的3周期滚动平均,其中x =(1 - > 20)^ 2:

> x <- (1:20)^2 
> embed (x, 3) 
     [,1] [,2] [,3] 
[1,] 9 4 1 
[2,] 16 9 4 
[3,] 25 16 9 
[4,] 36 25 16 
[5,] 49 36 25 
[6,] 64 49 36 
[7,] 81 64 49 
[8,] 100 81 64 
[9,] 121 100 81 
[10,] 144 121 100 
[11,] 169 144 121 
[12,] 196 169 144 
[13,] 225 196 169 
[14,] 256 225 196 
[15,] 289 256 225 
[16,] 324 289 256 
[17,] 361 324 289 
[18,] 400 361 324 
> apply (embed (x, 3), 1, mean) 
[1] 4.666667 9.666667 16.666667 25.666667 36.666667 49.666667 
[7] 64.666667 81.666667 100.666667 121.666667 144.666667 169.666667 
[13] 196.666667 225.666667 256.666667 289.666667 324.666667 361.666667 

我在R名单上找到了Achim Zeileis的一个很好的答案。以下是他说:

library(zoo) 
## create data 

x <- rnorm(365) 
## transform to regular zoo series with "Date" index 

x <- zooreg(x, start = as.Date("2004-01-01")) plot(x) 

## add rolling/running/moving average with window size 7 

lines(rollmean(x, 7), col = 2, lwd = 2) 

## if you don't want the rolling mean but rather a weekly ## time series of means you can do 
nextfri <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1) xw <- aggregate(x, nextfri, mean) 

## nextfri is a function which computes for a certain "Date" ## the next friday. xw is then the weekly series. 

lines(xw, col = 4) 

阿希姆接着说:

注意,这之间的区别是 滚动平均值和聚合系列 是由于不同的路线。可以通过更改rollmean()中的'对齐' 参数或调用合计 函数中的 nextfri()函数来更改此 。

这所有的阿希姆出来,而不是从我: http://tolstoy.newcastle.edu.au/R/help/05/06/6785.html