首页 > 解决方案 > 如何滞后向量然后创建矩阵?

问题描述

我打算编写一个函数lagit(a,k)来获得这样的结果:

lagit(c(1,5,6,4,7),c(1,3))

那么它应该输出:

    L0 L1 L3
    1  NA NA
    5  1  NA
    6  5  NA
    4  6  1
    7  4  5

我现在面临 2 个问题:
1. 将每一列作为向量 k 中的每个元素滞后;
2. 如何将向量绑定到矩阵(我使用了for loop.

我被要求base仅使用其中的功能。所以我不能从其他包中调用任何函数。

标签: rvectorlag

解决方案


尝试这个:

lagit <- function(a,k) {
   tmp <- lapply(k,function(i) c(rep(NA,i),head(a,length(a)-i)))
   res <- cbind(a,do.call(cbind,tmp))
   colnames(res) <- paste0("L",c(0,k))
   res
}
lagit(a,k)
#[1,] 1 NA NA
#[2,] 5  1 NA
#[3,] 6  5 NA
#[4,] 4  6  1
#[5,] 7  4  5

在哪里:

a <- c(1,5,6,4,7)
k <- c(1,3)

推荐阅读