2017-11-03 10 views
0

Ich habe eine erhebliche Zeit damit verbracht, nach einer Antwort mit wenig Glück zu suchen. Ich habe einige Zeitreihendaten und muss zusammenbrechen und ein rollendes Mittel jeder n-ten Zeile in diesen Daten erstellen. Es sieht so aus, als wäre das im Zoo möglich und vielleicht hmisc und ich bin mir sicher, dass es andere Pakete gibt. Ich muss die Reihen 1,2,3 dann 3,4,5 dann 5,6,7 und so weiter durchschnittlich. meine Daten sieht aus wie so und hat tausende von Beobachtungen:Lag und zusammenfassen Zeitreihendaten

id time x.1 x.2 y.1 y.2 
10  1  22  19  0  -.5 
10  2  27  44  -1  0 
10  3  19  13  0  -1.5 
10  4  7  22  .5  1 
10  5  -15 5  .33 2 
10  6  3  17  1  .33 
10  7  6  -2  0  0 
10  8  44  25  0  0 
10  9  27  12  1  -.5 
10  10 2  11  2  1 

ich es so aussehen möchten, wenn Sie fertig:

id time  x.1  x.2  y.1  y.2 
10 1  22.66 25.33 -.33 -.66 
10 2  3.66 13.33 .27  .50 

Die Zeit var 1 tatsächlich mal 1,2,3 gemittelt werden würde und 2 wäre 3,4,5 gemittelt, aber zu diesem Zeitpunkt wäre die Zeit var nicht wichtig zu halten. Ich würde nach ID gruppieren müssen, da es sich irgendwann ändert. Die einzige Möglichkeit, wie ich das erfolgreich umsetzen konnte, war Lag() zu verwenden und neue Zeilen um 1 und eine weitere um 2 zu führen, dann den Durchschnitt über Spalten zu nehmen. Danach müssen Sie die 234 123 und 345 und entfernt jede zweite Zeile

1 NA NA 
    2 1 NA 
    3 2 1 
    4 3 2 
    5 4 3 

Verwendung löschen ... dies besonders empörend wäre für jeden var zu tun, wie ich neue Daten zu sammeln.

irgendwelche Ideen? Hilfe würde sehr geschätzt werden

Antwort

0

so etwas vielleicht?

# sample data 
id <- c(10,10,10,10,10,10) 
time <- c(1,2,3,4,5,6) 
x1 <- c(22,27,19,7,-15,3) 
x2 <- c(19,44,13,22,5,17) 

df <- data.frame(id,time,x1,x2) 

means <- data.frame(rollmean(df[,c(1,3:NCOL(df))], 3)) 

means <- means[c(T,F),] 
means$time <- seq(1:NROW(means)) 
row.names(means) <- 1:NROW(means) 

> means 
    id  x1  x2 time 
1 10 22.666667 25.33333 1 
2 10 3.666667 13.33333 2