【发布时间】:2017-07-03 13:59:31
【问题描述】:
目标
我想使用一个长的数字向量来创建一个矩阵,其中每一列都是原始向量的连续偏移量(滞后或超前)。如果n 是最大偏移量,则矩阵将具有[length(vector), n * 2 + 1] 的维度(因为我们想要两个方向的偏移量,并包括0 偏移量,即原始向量)。
示例
为了说明,考虑以下向量:
test <- c(2, 8, 1, 10, 7, 5, 9, 3, 4, 6)
[1] 2 8 1 10 7 5 9 3 4 6
预期输出
现在我们创建值的偏移量,比如n == 3:
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] NA NA NA 2 8 1 10
[2,] NA NA 2 8 1 10 7
[3,] NA 2 8 1 10 7 5
[4,] 2 8 1 10 7 5 9
[5,] 8 1 10 7 5 9 3
[6,] 1 10 7 5 9 3 4
[7,] 10 7 5 9 3 4 6
[8,] 7 5 9 3 4 6 NA
[9,] 5 9 3 4 6 NA NA
[10,] 9 3 4 6 NA NA NA
我正在寻找一种有效的解决方案。 data.table 或 tidyverse 解决方案非常受欢迎。
仅返回没有NA 的行(即第 4 到第 7 行)也可以。
当前解决方案
lags <- lapply(3:1, function(x) dplyr::lag(test, x))
leads <- lapply(1:3, function(x) dplyr::lead(test, x))
l <- c(lags, test, leads)
matrix(unlist(l), nrow = length(test))
【问题讨论】:
-
@DavidArenburg,在传递矩阵时似乎只有一个
for循环。对于向量的情况,我认为这是一个单一的索引调用。
标签: r