2014-04-03 8 views
5

Ich versuche, ein Roll Mittelwert Wert von mehreren Dimensionen in R. Etwas gruppierte zu berechnen ich in SQL in der folgenden Art und Weise tun würde:R - ave rollapply Fehler: k <= n ist nicht wahr

AVG(value) OVER 
    (PARTITION BY dim1, dim2 ORDER BY date 
     RANGE BETWEEN 5 PRECEDING AND CURRENT ROW) 

die folgende scheint zu funktionieren, wenn ich nur ein paar Dimensionen auswählen:

s <- ave(df$value, 
    list(df$dim1, df$dim2), 
    FUN= function(x) rollapply(x, 5, mean, align='right')) 

aber gibt die folgende Fehlermeldung, wenn ich den vollen Satz von Dimensionen wählen:

Error: k <= n is not TRUE 

Ich bekomme den gleichen Fehler, wenn ich laufen:

rollapply(c(1:2), 3, mean, align='right') 

also denke ich, das Problem ist, dass einige Kombinationen von Dimensionen nicht genügend Werte Mittelwert zu berechnen.

Wie könnte ich es überwinden? Mir geht es gut, dass ich eine NA für diese Kombinationen habe. Jede Hilfe wäre sehr willkommen ..

+1

Nun, in Ihrem letzten Beispiel, Sie versuchen, die * letzten drei Werte zu verwenden, bei jeder Iteration * ... aber die Iteration Vektor 'c (1: 2)' hat nur zwei! –

+1

Ja, mir ist bewusst, was das Problem ist, zweites Beispiel soll es nur illustrieren. Die Frage ist, wie kann ich es überwinden und NA bekommen, wenn es zu wenig Elemente gibt, um rollapply zu berechnen, anstatt eine Fehlermeldung zu bekommen. – Adam

Antwort

2

roll_meanr vom RcppRoll Paket wird dies standardmäßig tun:

library(RcppRoll) 
> roll_meanr(c(1:2), 3) 
# [1] NA NA 
0

rollapply(c(1:10), 3, mean, align='right', fill=NA) sollte es tun, sofern Ihr Vektor ist lang genug, um alle Daten zu erzeugen.

beachten Sie, dass rollapply(c(1:2), 3, mean, align='right', fill=NA) noch den Fehler für den von @ robert-Krzyzanowski angegeben Grund gibt

Verwandte Themen