Подтвердить что ты не робот

Отменные переменные в R

Каков наиболее эффективный способ сделать матрицу запаздывающих переменных в R для произвольной переменной (т.е. не регулярного временного ряда)

Например:

Ввод

x <- c(1,2,3,4) 

2 лага, вывод:

[1,NA, NA]
[2, 1, NA]
[3, 2,  1]
[4, 3,  2]
4b9b3361

Ответ 1

Вы можете добиться этого, используя встроенную функцию embed(), где ее второй аргумент "размерность" эквивалентен тому, что вы назвали "lag":

x <- c(NA,NA,1,2,3,4)
embed(x,3)

## returns
     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]    2    1   NA
[3,]    3    2    1
[4,]    4    3    2

embed() обсуждался в предыдущем ответе от Joshua Reich. (Обратите внимание, что я добавил x с NA, чтобы воспроизвести желаемый результат).

Это не особенно хорошо названный, но он весьма полезен и эффективен для операций с раздвижными окнами, такими как скользящие суммы и скользящие средние.

Ответ 2

Используйте подходящие class для ваших объектов; база R имеет ts, которая имеет функцию lag() для работы. Обратите внимание, что эти объекты ts пришли из времени, когда "дельта" или "частота", где постоянны: ежемесячные или квартальные данные, как в макроэкономических рядах.

Для нерегулярных данных, таких как (business-) ежедневно, используйте zoo или xts, которые также могут обрабатывать (очень хорошо!) с задержками. Чтобы идти дальше оттуда, вы можете использовать такие пакеты, как dynlm или dlm позволяют использовать модели динамической регрессии с задержками.

В представлениях задач по временным рядам, эконометрике, финансам есть дополнительные указатели.

Ответ 3

Функция running в пакете gtools делает более или менее то, что вы хотите:

> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)

$`1:1`
[1] 1

$`1:2` 
[1] 1 2

$`1:3` 
[1] 1 2 3

$`2:4` 
[1] 2 3 4

Ответ 4

Метод, который лучше всего подходит для меня заключается в использовании функции lag из пакета dplyr.

Пример:

> require(dplyr)
> lag(1:10, 1)
 [1] NA  1  2  3  4  5  6  7  8  9
> lag(1:10, 2)
 [1] NA NA  1  2  3  4  5  6  7  8