不平衡面板数据:根据第一年观察计算指数

时间:2017-10-04 08:34:11

标签: r data.table panel-data

我再次提出了一个问题,即在使用大型数据库的情况下有效地进行一些没有循环的计算。

底层不平衡面板数据集采用下面的df1形式。可以看出,存在不同年份的个体(ID)。有时候还有瞎年(见ID 4):

library(data.table)
 df1 = data.table( Year = c(2000, 2001,2002, 2003, 2000, 2001, 2000,
 2001,2002, 2003, 2004, 2001,2003,2004),
                  ID = c(1,1,1,1,2,2,3,3,3,3,3,4,4,4),
                  V1 = c(10, 9, 8,11, 2,3, 16,12,15,16,20, 8,7,9),
                  V2 = c(2,3,2,4,0.5,1, 4,6,5,8,9, 8,10,11)
                  )

我想创建一个变量V3,其中为每个ID V1 / V2计算第一年的观察时间。在接下来的观察年中,维护或复制该值。 请参阅下面df2中所需的输出:

 df2 = data.table( Year = c(2000, 2001,2002, 2003, 2000, 2001, 2000,
                               2001,2002, 2003, 2004,2001,2003,2004),
                   ID = c(1,1,1,1,2,2,3,3,3,3,3,4,4,4),
                   V1 = c(10, 9, 8,11, 2,3, 12,16,15,16,20, 8,7,9),
                   V2 = c(2,3,2,4, 0.5,1, 4,6,5,8,9 ,8,10,11),
                   V3 = c(5,5,5,5,4,4,3,3,3,3,3, 1,1,1   )
                   )

1 个答案:

答案 0 :(得分:1)

您可以使用first中的data.table来计算第一年(假设您的数据已订购),即

library(data.table)

df1[, v3 := first(V1)/first(V2), by = ID][]

注意:您的数据存在一些差异(第8行),因此结果与您发布的内容不同