Хорошо, поэтому я хочу создать скользящие запаздывающие различия в R.
vec <- c(43.79979, 44.04865, 44.17308, 44.54638, 44.79524, 44.79524, 44.79524, 44.42195, 44.54638, 44.79524, 44.42195, 43.30206, 43.30206, 43.17764, 43.30206)
> length(vec)
[1] 15
Это то, что я пробовал до сих пор:
vec1 <- rollapply(vec, width = 2, fill = NA, FUN = diff)
Это дает такой результат:
[1] 0.24886 0.12443 0.37330 0.24886 0.00000 0.00000 -0.37329 0.12443 0.24886 -0.37329 -1.11989 0.00000 -0.12442 0.12442 NA
> length(vec1)
[1] 15
Обратите внимание, что у нас есть значение NA в элементе 15.
Итак, я хочу сделать это различие в лагах, скажем, для лагов 1,2 и 3 ... Таким образом, приведенный выше код не подходит для этого, поэтому я пробую следующее:
lag1 <- diff(vec, lag = 1, differences = 1, arithmetic = TRUE, na.pad = TRUE)
lag2 <- diff(vec, lag = 2, differences = 1, arithmetic = TRUE, na.pad = TRUE)
lag3 <- diff(vec, lag = 3, differences = 1, arithmetic = TRUE, na.pad = TRUE)
length(lag1)
length(lag2)
length(lag3)
Результат этого:
> lag1
[1] 0.24886 0.12443 0.37330 0.24886 0.00000 0.00000 -0.37329 0.12443 0.24886 -0.37329 -1.11989 0.00000 -0.12442 0.12442
> lag2
[1] 0.37329 0.49773 0.62216 0.24886 0.00000 -0.37329 -0.24886 0.37329 -0.12443 -1.49318 -1.11989 -0.12442 0.00000
> lag3
[1] 0.74659 0.74659 0.62216 0.24886 -0.37329 -0.24886 0.00000 0.00000 -1.24432 -1.49318 -1.24431 0.00000
> length(lag1)
[1] 14
> length(lag2)
[1] 13
> length(lag3)
[1] 12
Обратите внимание, что когда разница с запаздыванием выше ... он помещает результат сравнения в строку, в которой вычиталось значение ... поэтому он взял наше текущее значение - значение с запаздыванием. Он помещает результат сравнения на позицию запаздывающего значения. Затем мы теряем длину вектора. Я действительно хочу поместить результат с разницей в начальный номер (diff) и разместить ведущие NA, чтобы учесть недостающие значения в начале набора данных.
Используя в качестве примера задержку 2, это мой желаемый результат:
> lag2
[1] NA NA 0.37329 0.49773 0.62216 0.24886 0.00000 -0.37329 -0.24886 0.37329 -0.12443 -1.49318 -1.11989 -0.12442 0.00000
Кто-нибудь знает способ как это исправить ??
Чтобы, возможно, объяснить немного больше:
это начало вектора:
vec <- c(43.79979, 44.04865, 44.17308.....
Итак, если мы сделаем разницу в 2 с задержкой ...
Берем 3-й элемент ... 44.17308
- 43.79979
= результат 0.37329
.
Итак, я хочу иметь NA NA 0.37329
Вместо размещения 0.37329
на первой позиции в новом векторе lag2.