如何在R中计算滚动平均数(有例子)

1,005 阅读2分钟

在时间序列分析中,滚动平均数表示以前一定数量的时期的平均值。

在R中计算滚动平均值的最简单方法是使用zoo包中的**rollmean()**函数:

library(dplyr)
library(zoo)

#create data frame
df %>%
  mutate(rolling_avg = rollmean(day, k=3, fill=NA, align='right'))

这个特别的例子为标题为 ""的列计算了3天的滚动平均值。

下面的例子展示了如何在实践中使用这个函数。

例子:在R中计算滚动平均数

假设我们在R中拥有以下数据框,显示了某种产品在连续10天内的销售情况:

#create data frame
df <- data.frame(day=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
                 sales=c(25, 20, 14, 16, 27, 20, 12, 15, 14, 19))

#view data frame
df

   day sales
1    1    25
2    2    20
3    3    14
4    4    16
5    5    27
6    6    20
7    7    12
8    8    15
9    9    14
10  10    19

我们可以使用下面的语法来创建一个名为avg_sales3的新列,在数据框的每一行显示前3天的销售滚动平均值:

library(dplyr)
library(zoo)

#calculate 3-day rolling average of sales
df %>%
  mutate(avg_sales3 = rollmean(sales, k=3, fill=NA, align='right'))

   day sales avg_sales3
1    1    25         NA
2    2    20         NA
3    3    14   19.66667
4    4    16   16.66667
5    5    27   19.00000
6    6    20   21.00000
7    7    12   19.66667
8    8    15   15.66667
9    9    14   13.66667
10  10    19   16.00000

注意rollmean()函数中的k值控制了用于计算滚动平均值的前几个时期的数量。

avg_sales3列显示了前3个时期销售的滚动平均值。

例如,第一个值19.66667的计算方法是:。

3天移动平均值=(25+20+14)/3=19.66667

你也可以通过在**mutate()函数中使用多个rollmean()**函数来一次计算多个滚动平均线。

例如,下面的代码显示了如何计算销售额的3天和4天移动平均线:

library(dplyr)
library(zoo)

#calculate 3-day and 4-day rolling average of sales
df %>%
  mutate(avg_sales3 = rollmean(sales, k=3, fill=NA, align='right'),
         avg_sales4 = rollmean(sales, k=4, fill=NA, align='right'))

   day sales avg_sales3 avg_sales4
1    1    25         NA         NA
2    2    20         NA         NA
3    3    14   19.66667         NA
4    4    16   16.66667      18.75
5    5    27   19.00000      19.25
6    6    20   21.00000      19.25
7    7    12   19.66667      18.75
8    8    15   15.66667      18.50
9    9    14   13.66667      15.25
10  10    19   16.00000      15.00

avg_sales3avg_sales4列分别显示了销售额的3天和4天滚动平均数。