2018-01-25

Media móvil en R

Problema

¿Cómo podemos calcular la media móvil en R? Es decir, calcular la media aritmética de n datos anteriores. En el siguiente ejemplo, la media de los 4 datos anteriores. En el primer cálculo la media de los 4 primeros términos: del 1 al 4. En el segundo del 2 al 5, y así sucesivamente.

   num media_movil
1       1          NA
2       2          NA
3       3          NA
4       4         2.5
5       5         3.5
6       6         4.5

Solución

Muestro dos alternativas, con los paquetes zoo y RcppRoll, con sintáxis casi idéntica. En ambas utilizo dplyr para crear la nueva columna con la función mutate.

  • Alternativa 1: zoo
  • Con el argumento k (4 en este ejemplo) suministramos un número entero que indica el intervalo de la media móvil.

    library(zoo) 
    library(dplyr)
    df <- data.frame(num = 1:20)
      df %>% mutate(media_movil = rollmean(num, k = 4 , fill = NA, align = "right"))
    
  • Alternativa 2: RcppRoll
  • Con el argumento n (4 en este ejemplo) suministramos un número entero que indica el intervalo de la media móvil.

    library(RcppRoll)
    df %>% mutate(media_movil = roll_mean(num, n = 4, fill = NA, align = "right"))
    

Resultados

   num media_movil
1    1          NA
2    2          NA
3    3          NA
4    4         2.5
5    5         3.5
6    6         4.5
7    7         5.5
8    8         6.5
9    9         7.5
10  10         8.5
11  11         9.5
12  12        10.5
13  13        11.5
14  14        12.5
15  15        13.5
16  16        14.5
17  17        15.5
18  18        16.5
19  19        17.5
20  20        18.5

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos