Was ist der effizienteste Weg, um einen gleitenden Durchschnitt oder rollende Summe in R zu erstellen? Wie machst du die rollende Funktion zusammen mit einer "Gruppe von"?Kumulative Summen, gleitende Durchschnitte und SQL-Entsprechungen in "Gruppe nach" in R
Antwort
Während Zoo ist groß, manchmal gibt es einfachere Wege gibt. Wenn sich Ihre Daten gut verhalten und gleichmäßig verteilt sind, können Sie mit der Funktion embed() effektiv mehrere verzögerte Versionen einer Zeitreihe erstellen. Wenn Sie in das VARS-Paket für die automatische Vektorrückbildung schauen, sehen Sie, dass der Paketautor diese Route auswählt.
Um zum Beispiel des 3 Periode Rollender-Durchschnitt von x zu berechnen, wobei 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
Ich habe eine gute Antwort von Achim Zeileis auf der R-Liste gekratzt. Hier ist, was er sagte:
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)
Achim fuhr fort zu sagen:
Hinweis, dass der Unterschied zwischen dem, Roll bedeuten und die aggregierte Serie ist aufgrund der unterschiedlichen Ausrichtungen. Diese kann geändert werden, indem das Argument 'align' in
rollmean()
oder dienextfri()
Funktion im aggregierten Aufruf geändert wird.
All dies kam aus Achim, nicht von mir: http://tolstoy.newcastle.edu.au/R/help/05/06/6785.html
- 1. Wie erhält man die kumulative Summe nach Gruppe in R?
- 2. Gleitende FFT in R
- 3. Strom Stateful Berechnung: kumulative Summen
- 4. Kumulative Zählung in R
- 5. Schleife durch eine Ergebnismenge, um Durchschnitte nach Gruppe zu erzeugen
- 6. Gruppe nach Durchschnitt in R
- 7. Bedingte kumulative Summe in R
- 8. Linq-Gruppe durch und Summen Probleme
- 9. SPC - Kontrollkarten nach Gruppe in R
- 10. Summen-Array nach Anzahl in numpy
- 11. Berechnung der vierteiligen gleitenden Durchschnitte nach Sicherheit
- 12. Lag/führen nach Gruppe in R und dplyr
- 13. R Anzahl NA nach Gruppe
- 14. R data.table Gruppe nach Spaltenbereich
- 15. Python Pandas: Gruppe nach in Gruppe nach und Durchschnitt?
- 16. Subtraktion Summen in SSRS
- 17. Lineare Regression und Gruppe von in R
- 18. SQL Server kumulative Summe von Gruppe
- 19. Rollender Durchschnitt nach Gruppe R data.table
- 20. Gruppe nach Stunde und Datum
- 21. R: Dichtediagramm mit Farben nach Gruppe?
- 22. R Programmieren kumulative Rückholperioden Berechnungen mit Datentabelle
- 23. Wenden Sie eine rollierende Summe nach Gruppe in R
- 24. Pandas berechnen die Zählungen und Summen Gruppe von jeder Kategorie
- 25. Erzeuge alle ID-Paare, nach Gruppe mit data.table in R
- 26. konsekutiv/Walz Summen in einem Vektor in R
- 27. Machen kumulative Summe schneller
- 28. Kumulative Portfolio-Leistung nach Name
- 29. Effiziente Berechnung der Matrix kumulative Standardabweichung in r
- 30. Kumulative Summe mit der nächsten Spalte/Zeile in R