r - 如何滞后向量然后创建矩阵?
问题描述
我打算编写一个函数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
仅使用其中的功能。所以我不能从其他包中调用任何函数。
解决方案
尝试这个:
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)
推荐阅读
- c++ - 当我尝试调用指针方法时代码卡住了
- python - 有没有办法将数据库唯一值变成单个变量?
- spring - 如何模拟 HttpServletRequest getParameter 解码行为?
- php - 停用插件后将 WooCommerce 订单状态更改为已完成
- postgresql - Postgres 13 中的 tsrange 字段占用多少字节?(列俄罗斯方块)
- nlp - 删除停用词
- cookies - 如果名称相同但域不同,则 cookie 优先级
- python - PyPDF2 帮助打印页面数组
- git - git 问题:继续将主分支更改拉入从功能分支分支出来的单个开发分支是否更好?
- checkbox - 试图将 4 个复选框的值加在一起