gpt4 book ai didi

r - 如何循环 lapply 以在 R 中的多个变量上创建 LAG 项

转载 作者:行者123 更新时间:2023-12-05 08:55:23 25 4
gpt4 key购买 nike

对于我正在构建的模型,我想为我的数据表中的每个字段/向量创建多个滞后项:

以如下数据表为例:

    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 多行代码(每个变量一行)。

我试图将代码放入一个带有变量名列表的循环中,但列表中的变量名似乎无法被识别或正确传递到代码中:

    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 项)将不胜感激!

最佳答案

data.tableMap 来处理循环:

vars <- c("b","c")
rpv <- rep(1:2, each=length(vars))
df[, paste(vars, "lag", rpv, sep="_") := Map(shift, .SD, rpv), by=a, .SDcols=vars]

# a b c b_lag_1 c_lag_1 b_lag_2 c_lag_2
#1: x 10.863180 393.9568 NA NA NA NA
#2: x 6.139258 537.9199 10.863180 393.9568 NA NA
#3: x 11.896448 483.8036 6.139258 537.9199 10.86318 393.9568
#4: y 18.079188 509.6136 NA NA NA NA
#5: y 5.463224 233.6991 18.079188 509.6136 NA NA
#6: y 6.363724 869.8406 5.463224 233.6991 18.07919 509.6136

关于r - 如何循环 lapply 以在 R 中的多个变量上创建 LAG 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186677/

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