【发布时间】:2018-01-18 11:31:42
【问题描述】:
我有一个数据表,其中包含带有“初始值”的列 v2 和具有增长率的列 v1。我想通过将先前的值增加因子 v1 来推断 v2 超过可用值的年份。在“时间序列”表示法中,v2(t+1)=v2(t)*v1(t),给定一个 v2(0)。
问题是,初始值的年份可能因数据集中的 x 组而异。在某些组中,v2 可能会在多年后可用,或者根本不可用。此外,每组的年数可能会有所不同(不平衡面板)。使用 shift 函数没有帮助,因为它移动了 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多年可用怎么办? -
如果一个组中有多个v2可用的值,只需要更新缺失的,下一个可用的v2开始一个新的更新序列。
-
下面的代码,在一组循环中,工作并做我想做的事: ivec
标签: r data.table panel-data