2012-04-11 13 views
1

Ich möchte eine neue Spalte mit einem laufenden Mittelwert einer angegebenen Fachbreite generieren und dafür habe ich das Zoo-Paket (Rollmean-Funktion) verwendet. Mein Datenblatt besteht aus 1 Million Zeilen, und die Funktion gilt für die ersten 500.000, danach werden alle NAs produziert, irgendwelche Ideen, was ich vielleicht falsch mache?Fehler mit Zoo-Paket, Daten zu lang?

library("zoo") 

HB<-bin/2 
n<-length(dataraw$S) 
data<-dataraw[HB:(n-HB),] 
sax<- rollmean (dataraw$S, bin) 
data2<-cbind(data,sax) 

ich Hilfe aappreciate würden Sie mir geben könnte, ich habe viel zu lange mit diesem stecken. Danke im Voraus.

+2

'? Rollmean' sagt dies:" Die Standardmethode von rollmean verarbeitet keine Eingaben, die NA enthalten. Verwenden Sie in solchen Fällen stattdessen rollapply. " –

Antwort

1

Sie haben fast sicher eine NA in dort, die sich dann durch rollmean() ausbreitet. Eine Million Wert von selbst schaffen keine Probleme, wie dieses kleine Experiment zeigt:

R> library(zoo) 
R> X <- zoo(rnorm(1e6), order.by=Sys.time()+seq(1,1e6)*1e-3) 
R> Xrm <- rollmean(X, 63) 
R> summary(cbind(X, Xrm)) 
    Index        X    Xrm   
Min. :2012-04-11 13:57:28.9 Min. :-5.1857 Min. :-0.5843 
1st Qu.:2012-04-11 14:01:38.9 1st Qu.:-0.6741 1st Qu.:-0.0866 
Median :2012-04-11 14:05:48.9 Median :-0.0011 Median :-0.0013 
Mean :2012-04-11 14:05:48.9 Mean :-0.0011 Mean :-0.0011 
3rd Qu.:2012-04-11 14:09:58.9 3rd Qu.: 0.6727 3rd Qu.: 0.0838 
Max. :2012-04-11 14:14:08.9 Max. : 4.8914 Max. : 0.5874 
                NA's :62  
R> 

Die einzigen nationalen Agenturen sind hier aufgrund der Einführung der anfänglichen Verzögerung am Anfang.

Aber wenn ich ein einzelnen NA in X einzuführen, bricht die Hölle los:

R> X[567890] <- NA 
R> summary(cbind(X, rollmean(X, 63))) 
    Index        X   rollmean(X, 63) 
Min. :2012-04-11 13:57:28.9 Min. :-5.18574 Min. :-1  
1st Qu.:2012-04-11 14:01:38.9 1st Qu.:-0.67413 1st Qu.: 0  
Median :2012-04-11 14:05:48.9 Median :-0.00110 Median : 0  
Mean :2012-04-11 14:05:48.9 Mean :-0.00109 Mean : 0  
3rd Qu.:2012-04-11 14:09:58.9 3rd Qu.: 0.67268 3rd Qu.: 0  
Max. :2012-04-11 14:14:08.9 Max. : 4.89137 Max. : 1  
           NA's :1   NA's :432173 
R> 

und ich am Ende mit 432K Hinter NAs auf.

+0

Wenn das der Fall ist, sollten Sie sich 'rollapply' anschauen. Z.B. 'rollapply (datenraw $ S, width = bin, FUN = Mittelwert, fill = NA)' kann mit NA-Werten in der Mitte des Vektors umgehen. – smu

+0

Das war's! Tausend Dank!!! –

+0

Toll - wenn es Ihre Frage gelöst hat, sollten Sie a) die Antwort "upvotieren" (klicken Sie auf den Pfeil nach oben) und b) die Antwort "akzeptieren" (klicken Sie auf das Häkchen). –