Nach this Antwort zu befassen, ich habe einen gleitenden Durchschnitt Funktion für eine Fenstergröße von 2, 3 und 4.R durchschnittliche Funktion bewegt sich mit Werten von weniger Fenstergröße
require(zoo)
#MOVING AVERAGE FUNCTION
get.mav <- function(df, n = 2){
if(length(df) < n){
return(df)
}
c(df[1:(n-1)],rollapply(df,width = n, mean, align="right"))
}
#DATA FRAME (dummy)
ID <- c("d","b","a","a","c","e","b","d","b","b")
Value <- c(4,5,5,3,2,1,6,9,5,5)
df <-data.frame(ID,Value)
# FUNCTION IMPLEMENTATION
df <- with(df,df[order(ID),])
df$mav2 <- unlist(aggregate(Value~ID,df,get.mav,na.action = NULL,n=2)$Value)
df$mav3 <- unlist(aggregate(Value~ID,df,get.mav,na.action = NULL,n=3)$Value)
df$mav4 <- unlist(aggregate(Value~ID,df,get.mav,na.action = NULL,n=4)$Value)
#OUTPUT
ID Value mav2 mav3 mav4
a 5 5 5 5
a 3 4 3 3
b 5 5 5 5
b 6 5.5 6 6
b 5 5.5 5.3 5
b 5 5 5.3 5.25
c 2 2 2 2
d 4 4 4 4
d 9 6.5 9 9
e 1 1 1 1
Die Funktion get.mav
genau so funktioniert, verwendet es sollte. Ich möchte diese Funktion ändern, so dass
Für Fenstergröße 3, wenn df Länge 2 ist, dauert es den Mittelwert dieser beiden Elemente statt einfach df zurückzugeben.
Ähnlich für Fenstergröße 4, wenn die Länge 3 oder 2 ist, nimmt es mittlere dieser drei oder zwei Elemente eher einfach zurückgeben df.
Ich habe versucht, die if-Anweisungen, aber Vergleiche funktionieren nicht richtig. Jede Hilfe wäre willkommen.
Danke.
genial. Ich liebe, wie ordentlich dein Code ist. – urwaCFC