Для цикла с функцией для скользящего / скользящего среднего?

#r #for-loop #rolling-computation

#r #цикл for #скользящее вычисление

Вопрос:

По сути (в R) я хочу применить функцию скользящего среднего за определенный период времени (например, переменные даты и времени), чтобы увидеть, как меняется конкретная метрика с течением времени. Однако метрика сама по себе является функцией. Оценки могут быть либо 1 (pro), 0 (нейтрально), либо -1 (отрицательно). Функция для показателя:

 function(pro, neg, total) {
x <- (pro / total) * 100
y <- (neg / total) * 100
x - y
}
 

Таким образом, процент от 1 минус процент от -1 является значением показателя.

Учитывая временные метки для каждого записанного результата, я хочу оценить показатель как скользящее среднее по всем строкам. Я предположил, что цикл for будет лучшим способом применить это, но я застрял в том, как это сделать.

У кого-нибудь есть какие-либо мысли / советы?

Комментарии:

1. Вероятно, вам нужна какая-то вариация rollapply из пакета zoo . Опубликуйте некоторые примеры данных и ожидаемый результат, чтобы помочь авторам ответов предоставить более подробную информацию

Ответ №1:

Как упоминалось в комментариях, rollapply() from zoo — хороший вариант. Я взял на себя смелость сгенерировать некоторые примеры данных, извиняюсь, если они не похожи на ваши.

 library(zoo)

f <- function(x, l) {
    p <- sum(x == 1) / l
    n <- sum(x == -1) / l
    (p - n)*100
}

# Or more efficiently
f <- function(x, l=length(x)) {
    (sum(x)/l)*100
}

set.seed(1)
N <- 25
dtf <- data.frame(time=as.Date(15000 (1:N)), score=sample(-1:1, N, rep=TRUE))

score <- read.zoo(dtf)
l <- 8
zts <- cbind(score, rolling=rollapply(score, l, f, l, fill=NA))

zts
#            score rolling
# 2011-01-27    -1      NA
# 2011-01-28     0      NA
# 2011-01-29     0      NA
# 2011-01-30     1    12.5
# 2011-01-31    -1    25.0
# 2011-02-01     1    12.5
# 2011-02-02     1     0.0
# 2011-02-03     0   -25.0
# 2011-02-04     0     0.0
# 2011-02-05    -1   -12.5
# 2011-02-06    -1   -12.5
# 2011-02-07    -1   -12.5
# 2011-02-08     1     0.0
# 2011-02-09     0    25.0
# 2011-02-10     1    37.5
# 2011-02-11     0    62.5
# 2011-02-12     1    62.5
# 2011-02-13     1    50.0
# 2011-02-14     0    37.5
# 2011-02-15     1    25.0
# 2011-02-16     1     0.0
# 2011-02-17    -1      NA
# 2011-02-18     0      NA
# 2011-02-19    -1      NA
# 2011-02-20    -1      NA
 

Комментарии:

1. Кажется, это работает. Спасибо, что представили мне пакет zoo! Я обязательно добавлю его в свой репертуар