Итак, я использовал zoo::rollapply()
довольно религиозно, но я не думаю, что это подходит для рассматриваемой проблемы.У меня есть требование, в котором я хотел бы реализовать усадку скользящего окна.Так, например, вот некоторые примеры данных:
v <- data.frame(date=as.Date("2012-1-2") + 0:4, vals=c(1,2,3,4,5))
v
date vals
1 2012-01-02 1
2 2012-01-03 2
3 2012-01-04 3
4 2012-01-05 4
5 2012-01-06 5
Я бы хотел, чтобы скользящее окно перемещалось в порядке убывания даты, поэтому rev(v$date)
для заказа, и я хотел бы суммировать значения следующим образом [lagging by1 каждое окно] (каждая строка ниже является окном):
5 + 4 + 3 + 2 + 1 = 15
4 + 3 + 2 + 1 = 10
3 + 2 + 1 = 6
2 + 1 = 3
1 = 1
, поэтому я ожидаю, что мой data.frame будет:
# date vals new_val
#1 2012-01-02 1 1
#2 2012-01-03 2 3
#3 2012-01-04 3 6
#4 2012-01-05 4 10
#5 2012-01-06 5 15
ПРИМЕЧАНИЕ. Скажем так:В примере используется функция sum(x)
для вычисления каждого окна.Было бы здорово обобщить это на любой function(x)
.Допустим, function(x) { (min(x) + max(x)) * length(x) * sum(x) }
ПРИМЕЧАНИЕ. Я бы предпочел реализацию base R, но другие пакеты, которые могли бы быть применимы, также были бы интересны