Я пытаюсь использовать таблицу данных, чтобы упростить мою массовую работу по моделированию. Я столкнулся с этой проблемой, но не нашел лучшего способа ее решить.
Вот мой пример:
set.seed(1001)
dt1<-data.table("Country"=c("Algeria","Mongolia"),
"Year"=c(2000:2020),
"var1"=runif(20,10000,45000),
"var2"=0,
"var3"=0,
"var4"=0)
setorder(dt1,Country)
Я хотел бы обновить var2, используя значения предыдущей строки в указанный период c, поэтому я попытался
dt1[Year>2000&Year<2010,var2:=var1[i]-sum(.SD)[i-1],by=Country,.SDcols=c(var2,var3,var4)]
Очевидно, это не сработало. Проблема в var 2, и сумма других переменных в предыдущей строке должна обновляться одновременно. Так что я не думаю, что функция shift сработает.
Пока я использую очень громоздкий для l oop, но это работает. Вот мой forl oop
for(i in 1:nrow(dt1)){
if (i <=10){
for (j in 4:6){
if(j==4){
dt1[[i,j]]=dt1[[i,3]]-rowSums(dt1[[i-1,c(4:6)]])
}
else{
dt1[[i,j]]=dt1[[i-1,j-1]] * 0.001
}
}
}
}
Любое предложение будет высоко ценится!