Sadece bunu kendileri hesaplamak isteyen insanlar için, bundan başka bir şey değildir:
# x = vector with numeric data
# n = window length
y <- numeric(length = length(x))
for (k in c(1:(n - 1))) {
y[k] <- sum(x[1:k])
}
for (k in c(n:length(x))) {
y[k] <- sum(x[(k - n + 1):k])
}
y
Ama onu bağımsız hale getirmek eğlenceli olur sum()
, böylece herhangi bir 'hareketli' işlevi hesaplayabilirsiniz!
# our working horse:
moving_fn <- function(x, n, fun, ...) {
# x = vector with numeric data
# n = window length
# fun = function to apply
# ... = parameters passed on to 'fun'
y <- numeric(length = length(x))
for (k in c(1:(n - 1))) {
y[k] <- fun(x[1:k], ...) # note the '...', it will include 'na.rm' when using in moving_average()
}
for (k in c(n:length(x))) {
y[k] <- fun(x[(k - n + 1):k], ...)
}
return(y)
}
# and now any variation you can think of!
moving_average <- function(x, n = 5, na.rm = FALSE) {
moving_fn(x = x, n = n, fun = mean, na.rm = na.rm)
}
moving_sum <- function(x, n = 5, na.rm = FALSE) {
moving_fn(x = x, n = n, fun = sum, na.rm = na.rm)
}
moving_maximum <- function(x = 5, n, na.rm = FALSE) {
moving_fn(x = x, n = n, fun = max, na.rm = na.rm)
}
moving_median <- function(x, n = 5, na.rm = FALSE) {
moving_fn(x = x, n = n, fun = median, na.rm = na.rm)
}
forecast::ma
ve doğru değil, tüm mahalle içerir.