【发布时间】:2010-11-21 16:00:00
【问题描述】:
在 R 中为任意变量(即不是常规时间序列)制作滞后变量矩阵的最有效方法是什么
例如:
输入:
x <- c(1,2,3,4)
2 滞后,输出:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
【问题讨论】:
标签: r time-series
在 R 中为任意变量(即不是常规时间序列)制作滞后变量矩阵的最有效方法是什么
例如:
输入:
x <- c(1,2,3,4)
2 滞后,输出:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
【问题讨论】:
标签: r time-series
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
【讨论】:
您可以使用内置的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
embed() 在 Joshua Reich 的 previous answer 中进行了讨论。 (请注意,我在 x 前面加上了 NA 来复制您想要的输出)。
它的名字不是特别好,但它对于涉及滑动窗口的操作非常有用且功能强大,例如滚动求和和移动平均线。
【讨论】:
最适合我的方法
是使用dplyr 包中的lag 函数。
例子:
> 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
【讨论】: