2016-06-07 17 views
1

bedeuten ausrichten Ich bin mit rollmeanWie man richtig eine Roll

library(zoo) 
library(TTR) 
library(data.table) 
date = seq(as.Date("2016-01-01"),as.Date("2016-01-10"),"day") 
value =seq(1,10,1) 
mydata = data.frame (date, value) 
mydata 
setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) rollmean(value, x, fill = rep(NA,x-1),align="right")),][] 

     date value F12 F13 
1: 2016-01-01  1 NA NA 
2: 2016-01-02  2 1.5 NA 
3: 2016-01-03  3 2.5 2 
4: 2016-01-04  4 3.5 3 
5: 2016-01-05  5 4.5 4 
6: 2016-01-06  6 5.5 5 
7: 2016-01-07  7 6.5 6 
8: 2016-01-08  8 7.5 7 
9: 2016-01-09  9 8.5 8 
10: 2016-01-10 10 9.5 9 

und ich würde die mittlere in einer Reihe wie die vorherigen n Beobachtungen werden berechnet. Sie können in den obigen Daten sehen, dass der Mittelwert in der zweiten Reihe für F12 1,5 ist, was der Mittelwert von 2 & 1 ist. Ich möchte, dass NA und die 1,5 in Reihe 3 erscheinen, so dass der Mittelwert von F12 in die dritte Reihe wäre 1,5. Ist das möglich? Ich habe versucht, den Ausrichtungsparameter zu ändern, aber kein Glück. Vielen Dank.

Antwort

3

Wir müssen es mit shift einzuwickeln:

setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) 
    shift(rollmean(value, x, fill = NA, align="right")))] 
+0

@ProcrastinatusMaximus Sie für die Bearbeitung danken. – akrun

+1

Beachten Sie, dass eine dieser Funktionen alternativ verwendet werden kann. Der erste verwendet "rollmeanr" und der zweite verwendet 'rollapply' und beinhaltet nicht" shift ". 'function (x) shift (rollmeanr (Wert, x, fill = NA))' oder 'function (x) rollapply (Wert, Liste (-seq_len (x)), Mittelwert, fill = NA)' –