使用Zoo对象创建多个滞后变量

时间:2019-02-03 22:21:21

标签: r

我需要动态创建“ n”个变量,原始变量的滞后时间从1到“ n”。像这样:- OrigVar

DatePeriod, value
2/01/2018,6
3/01/2018,4
4/01/2018,0
5/01/2018,2
6/01/2018,4
7/01/2018,1
8/01/2018,6
9/01/2018,2
10/01/2018,7

Lagged 1 variable
2/01/2018,NA
3/01/2018,6
4/01/2018,4
5/01/2018,0
6/01/2018,2
7/01/2018,4
8/01/2018,1
9/01/2018,6
10/01/2018,2
11/01/2018,7

Lagged 2 variable
2/01/2018,NA
3/01/2018,NA
4/01/2018,6
5/01/2018,4
6/01/2018,0
7/01/2018,2
8/01/2018,4
9/01/2018,1
10/01/2018,6
11/01/2018,2
12/01/2018,7

Lagged 3 variable
2/01/2018,NA
3/01/2018,NA
4/01/2018,NA
5/01/2018,6
6/01/2018,4
7/01/2018,0
8/01/2018,2
9/01/2018,4
10/01/2018,1
11/01/2018,6
12/01/2018,2
13/01/2018,7

以此类推

我尝试使用shift功能和其他各种功能。在大多数为我工作的变量中,滞后变量在原始变量的最后日期结束。换句话说,滞后变量的长度与原始变量的长度相同。

我正在寻找新的滞后变量以“ kth”滞后向下移动,数据序列以“ k”元素(包括索引)进行扩展。

我之所以需要这样做,是因为能够使用回归系数和样本内超过周期的相应滞后变量值来计算因变量的值

y1 <- Lag(ciresL1_usage_1601_1612, shift = 1)
head(y1)
2016-01-02 2016-01-03 2016-01-04 2016-01-05 2016-01-06 2016-01-07 
        NA  -5171.051  -6079.887  -3687.227  -3229.453  -2110.368 

y2 <- Lag(ciresL1_usage_1601_1612, shift = 2)
head(y2)
2016-01-02 2016-01-03 2016-01-04 2016-01-05 2016-01-06 2016-01-07 
        NA         NA  -5171.051  -6079.887  -3687.227  -3229.453 
tail(y2)
2016-12-26 2016-12-27 2016-12-28 2016-12-29 2016-12-30 2016-12-31 
 -2316.039  -2671.185  -4100.793  -2043.020  -1147.798   1111.674 

tail(ciresL1_usage_1601_1612)
2016-12-26 2016-12-27 2016-12-28 2016-12-29 2016-12-30 2016-12-31 
 -4100.793  -2043.020  -1147.798   1111.674   3498.729   2438.739 

有没有一种相对容易的方法。我知道我可以做到这一点,方法是在新向量中循环并添加“ k”行,然后将数据重新加载到该新向量中,从而适当地移动新向量中的数据值,但是除非希望,否则我不想使用该方法。 。我非常有信心地相信,有比这更好的方法了!

顺便说一下,该对象是一个动物园对象,以每天的日期作为索引。

最诚挚的问候

Deepak

1 个答案:

答案 0 :(得分:1)

将输入的Zoo对象转换为zooreg,然后像这样使用lag.zooreg

library(zoo)

# test input
z <- zoo(1:10, as.Date("2008-01-01") + 0:9)

zr <- as.zooreg(z)
lag(zr, -(0:3))

给予:

           lag0 lag-1 lag-2 lag-3
2008-01-01    1    NA    NA    NA
2008-01-02    2     1    NA    NA
2008-01-03    3     2     1    NA
2008-01-04    4     3     2     1
2008-01-05    5     4     3     2
2008-01-06    6     5     4     3
2008-01-07    7     6     5     4
2008-01-08    8     7     6     5
2008-01-09    9     8     7     6
2008-01-10   10     9     8     7
2008-01-11   NA    10     9     8
2008-01-12   NA    NA    10     9
2008-01-13   NA    NA    NA    10