Как обратиться к предыдущей строке в таблице данных (R) без использования функции сдвига? - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь использовать таблицу данных, чтобы упростить мою массовую работу по моделированию. Я столкнулся с этой проблемой, но не нашел лучшего способа ее решить.

Вот мой пример:

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
      }
    }
  }
}

Любое предложение будет высоко ценится!

...