【发布时间】:2017-09-12 23:30:22
【问题描述】:
对于我正在构建的模型,我想为数据表中的每个字段/向量创建多个滞后项:
以如下数据表为例:
a<-c('x','x','x','y','y','y')
b<-runif(6, min=0, max=20)
c<-runif(6, min=50, max=1000)
df<-as.data.table(data.frame(a,b,c))
我可以使用以下代码为每个组 a 中的变量 b 创建 2 个滞后项:
df[,c(paste("b","_L",1:2,sep="")):=lapply(1:2, function(i) c(rep(NA, i),head(b, -i))),by=a]
但是,当我尝试将此代码应用于大型数据表(100 多个变量)时,我的问题出现了,我不想重复 100 多行代码(每个变量 1 行)。
我试图将代码放入带有变量名列表的循环中,但列表中的变量名似乎无法被识别或正确传递到代码中:
looplist <- colnames(df[,!1])
for (l in looplist) {
df[,c(paste(l,"_L",1:2,sep="")):=lapply(1:2, function(i) c(rep(NA, i),head(l, -i))),by=a]
}
任何关于如何使此循环跨变量工作的建议,或任何其他实现相同目标的方法(为数据表中的每个变量创建多个 LAG 项)都将不胜感激!
【问题讨论】:
标签: r