У меня есть таблица данных со столбцом v2 с «начальными значениями» и столбцом v1 с темпом роста. Я хотел бы экстраполировать v2 на годы, превышающие доступное значение, увеличив предыдущее значение на коэффициент v1. В обозначении «временных рядов» v2(t+1)=v2(t)*v1(t), учитывая v2(0).
Проблема в том, что год начального значения может варьироваться в зависимости от группы x в наборе данных. В некоторых группах версия 2 может быть доступна через несколько лет или вообще не будет доступна. Кроме того, количество лет в группе может варьироваться (несбалансированная панель). Использование функции сдвига не помогает, поскольку она сдвигает v2 один раз и не ссылается на ранее обновленное значение.
x year v1 v2
1: a 2012 0.8501072 NA
2: a 2013 1.0926093 39.36505
3: a 2014 1.2084379 NA
4: a 2015 0.8921997 NA
5: a 2016 0.8023251 NA
6: b 2012 1.1005287 NA
7: b 2013 1.0139800 NA
8: b 2014 1.1539676 NA
9: b 2015 1.2282501 NA
10: b 2016 0.8052265 NA
11: c 2012 0.8866425 NA
12: c 2013 0.9952566 44.30377
13: c 2014 0.9092020 NA
14: c 2015 1.0295864 15.04948
15: c 2016 0.8812966 NA
Значение V2, x=a, year=2014 должно быть 39,36*1,208, а в 2015 году этот ответ умножается на 0,89.
Следующий код в наборе циклов работает и делает то, что я хочу:
ivec<-unique(DT[,x])
for (i in 1:length(ivec)) {
tvec<-unique(DT[x==ivec[i] ,y])
for (t in 2:length(tvec)) {
if (is.na(DT[x==ivec[i] & y==tvec[t], v2])) {
DT[x==ivec[i] & y==tvec[t],v2:=DT[x==ivec[i] & y==tvec[(t-1)],v2]*v1]
}
}
}
v2
доступен через несколько лет? - person CPak   schedule 10.08.2017