2017-09-10 1 views
2

Ich frage mich, ob es eine Möglichkeit gibt, wie die rollmean Funktion aus dem zoo-Paket schleppende Variablen (oder möglicherweise eine andere kumulative Art Rolling Mean Funktion) zu behandeln. Sagen Sie, dass ich die folgenden data.frame habe:Füllen Sie trailing Variablen basierend auf Zeilenposition mit Rollmean

df <- as.data.frame(as.matrix(sample(1:10), ncol = 3)) 
df$roll <- rollmean(df$V1, 5, fill = NA, align = "right") 
df 

    V1 roll 
1 2 NA 
2 7 NA 
3 6 NA 
4 1 NA 
5 9 5.0 
6 5 5.6 
7 10 6.2 
8 3 5.6 
9 4 6.2 
10 8 6.0 

Ich weiß, dass ich so etwas wie fill = "extend" mit rollmean zu bekommen den Durchschnitt aller Hinter Variablen verwenden kann, aber ist es eine Möglichkeit, diese Vorgehensweise anzupassen erweitern, so dass jeder Die abschließende Variable ist kumulativ basierend auf der Zeilenposition? Also was ich will ist etwas wie die unten df, wo Zeile 4 df$roll hat ein 4-reihiges Rollfenster, Zeile 3 hat ein 3-reihiges Rollfenster, und so weiter.

V1 roll 
1 2 NA 
2 7 4.5 
3 6 5.0 
4 1 4.0 
5 9 5.0 
6 5 5.6 
7 10 6.2 
8 3 5.6 
9 4 6.2 
10 8 6.0 

Irgendwelche Ideen?

Antwort

2

rollapply (und rollapplyr die Standardausrichtung rechts) unterstützt das partial = TRUE Argument. Siehe ?rollapply

transform(df, roll = rollapplyr(V2, 5, mean, partial = TRUE)) 

geben:

V1 V2 roll 
1 1 2 2.0 
2 2 7 4.5 
3 3 6 5.0 
4 4 1 4.0 
5 5 9 5.0 
6 6 5 5.6 
7 7 10 6.2 
8 8 3 5.6 
9 9 4 6.2 
10 10 8 6.0 

Hinweis: Um den Code zum Erzeugen des Eingangs reproduzierbar eine verwenden set.seed(...) hätte zu machen. Da dies nicht geschehen ist, haben wir diese:

df <- structure(list(V1 = 1:10, V2 = c(2L, 7L, 6L, 1L, 9L, 5L, 10L, 
3L, 4L, 8L)), .Names = c("V1", "V2"), row.names = c(NA, -10L), class = "data.frame") 
+0

Sorry, sollte ich nicht verwendet haben 'Probe()' in der ursprünglichen Frage, aber das ist genau das, was ich gesucht habe! Vielen Dank. –

+0

Auch für meinen eigentlichen Zweck war es mir möglich, die 'rolllapplyr (V2, 5, mean, partially = TRUE)) Zeile in die 'dplyr'-Kette zu werfen, in der ich arbeite, was perfekt funktionierte. –

Verwandte Themen