Je veux calculer la moyenne mobile pour toutes les variables dans la colonne "sp". Ceci est un exemple de mes données:utiliser rollapply et zoo pour calculer la moyenne mobile d'une colonne de variables
the_date sp wins
01-06--2012 1 305
02-06--2012 1 276
03-06--2012 1 184
04-06--2012 1 248
05-06--2012 1 243
06-06--2012 1 363
07-06--2012 1 272
01-06--2012 2 432
02-06--2012 2 369
03-06--2012 2 302
04-06--2012 2 347
05-06--2012 2 357
06-06--2012 2 331
07-06--2012 2 380
01-06--2012 3 1
02-06--2012 3 2
03-06--2012 3 3
04-06--2012 3 2
05-06--2012 3 0
06-06--2012 3 2
07-06--2012 3 0
Ce que je veux, est d'avoir une colonne ajoutée aux données, qui donne à la moyenne mobile sur 3 jours pour chaque sp. Donc, la sortie suivante est ce que je désire:
the_date sp wins SMA_wins
01-06--2012 1 305 305.00
02-06--2012 1 276 290.50
03-06--2012 1 184 255.00
04-06--2012 1 248 236.00
05-06--2012 1 243 225.00
06-06--2012 1 363 284.67
07-06--2012 1 272 292.67
01-06--2012 2 432 432.00
02-06--2012 2 369 400.50
03-06--2012 2 302 367.67
04-06--2012 2 347 339.33
05-06--2012 2 357 335.33
06-06--2012 2 331 345.00
07-06--2012 2 380 356.00
01-06--2012 3 1 1.00
02-06--2012 3 2 1.50
03-06--2012 3 3 2.00
04-06--2012 3 2 2.33
05-06--2012 3 0 1.67
06-06--2012 3 2 1.33
07-06--2012 3 0 0.67
J'utilise rollapply.
df <- group_by(df, sp)
df_zoo <- zoo(df$wins, df$the_date)
mutate(df, SMA_wins=rollapplyr(df_zoo, 3, mean, align="right", partial=TRUE))
Si je filtre mes données sur un sp spécifique, cela fonctionne parfaitement.
Comment puis-je faire ce travail lorsque je grouper par sp?
Merci
Merci @jeremycg. Cela donne le bon résultat. Cependant, il fonctionne indépendamment de la colonne "the_date". Fondamentalement, il prend les échantillons de manière séquentielle. Cela fonctionne si mes données d'entrée sont triées par date mais que se passe-t-il si ce n'est pas le cas? – ah25
Ajouter dans 'arrange (the_date)' – jeremycg