在R中为任意变量(即不是常规时间序列)制作滞后变量矩阵的最有效方法是什么
例如:
输入 :
x <- c(1,2,3,4)
2滞后,输出 :
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
答案 0 :(得分:21)
你可以使用内置的embed()
函数实现这一点,其中第二个'维度'参数等同于你所谓的'滞后':
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
Joshua Reich在previous answer中讨论了{p> embed()
。 (注意,我在前面添加了x和NAs来复制你想要的输出)。
它没有特别好的命名,但它对于涉及滑动窗口的操作非常有用和强大,例如滚动总和和移动平均值。
答案 1 :(得分:8)
为对象使用正确的class
; base R具有ts
,其具有lag()
功能。请注意,这些ts
对象来自“delta”或“frequency”的时间,其中常量:月度或季度数据,如宏观经济系列。
对于诸如(business-)每日的不规则数据,使用zoo或xts包也可以处理(非常好!)滞后。为了更进一步,你可以使用像dynlm或dlm这样的软件包,允许使用滞后的动态回归模型。
关于时间序列,计量经济学,财务的任务观点都有进一步的指示。
答案 2 :(得分:2)
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
答案 3 :(得分:1)
最适合我的方法
是使用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