gpt4 book ai didi

r - 有效创建偏移量矩阵

转载 作者:行者123 更新时间:2023-12-04 17:43:42 26 4
gpt4 key购买 nike

目标
我想使用一个长的数字向量来创建一个矩阵,其中每一列都是原始向量的连续偏移量(滞后或领先)。如 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.tabletidyverse解决方案非常受欢迎。
仅返回没有 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))

最佳答案

在基础 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

数据
test <- c(2, 8, 1, 10, 7, 5, 9, 3, 4, 6)

关于r - 有效创建偏移量矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com