我想使用一个长数字向量来创建一个矩阵,其中每列是原始向量的连续偏移(滞后或超前).如果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
Run Code Online (Sandbox Code Playgroud)
现在我们创建价值偏移,让我们说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
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个有效的解决方案.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))
Run Code Online (Sandbox Code Playgroud)
在基本 R 中,您可以使用embed获取第 4 行到第 7 行。但是,您必须颠倒列顺序。
embed(test, 7)[, 7:1]
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 2 8 1 10 7 5 9
[2,] 8 1 10 7 5 9 3
[3,] 1 10 7 5 9 3 4
[4,] 10 7 5 9 3 4 6
Run Code Online (Sandbox Code Playgroud)
数据
test <- c(2, 8, 1, 10, 7, 5, 9, 3, 4, 6)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |