什么是在R中创建滞后变量矩阵的最有效方法,针对于任意变量(即不是一个常规的时间序列)?
例如: 输入:
例如: 输入:
x <- c(1,2,3,4)
2个滞后项,输出:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
x <- c(1,2,3,4)
2个滞后项,输出:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
你可以使用内置的embed()
函数实现此功能,其中第二个“dimension”参数相当于您所称的“滞后”:
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在另一个回答中讨论了embed()
函数。(请注意,我在x之前添加了NA以复制您所需的输出结果)。
虽然名称不是特别恰当,但对于涉及滑动窗口(例如滚动总和和移动平均值)的操作非常有用且功能强大。
gtools
包中的running
函数可以实现您想要的功能:
> 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
> 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