我想使用行n-1值来计算行n中的某些内容。下面的代码实现了我想要的,但由于数据表的所有复制都在进行,因此对于大型数据集来说实际上很慢。我已经尝试了各种实验,包括shift,[-1L]在i中,以及类似帖子中建议的其他内容。是否有for
循环的替代方法可以利用数据表?
library(data.table)
DT <- data.table(GDP = c(12622, 13087, 14772, 17156, 19536, 21979, 24428, 26777, 28990, 31007),
elas = c(.42, .45, .23, .25, .27, .30, .31, .20, .19, .15))
cons.start = 7.2
DT[, cons := 0]
DT[1, cons := cons.start]
DT[,GDP.lag1 := data.table::shift(GDP, type = "lag")]
DT[,temp.inc := elas * (GDP - GDP.lag1)/(GDP + GDP.lag1)]
for(i in 2:nrow(DT)) {
DT$cons[i] <- DT$cons[i-1] * (1 + DT$temp.inc[i]) / (1 - DT$temp.inc[i])
}