不平衡面板数据:根据第一年的观察计算指数
Unbalanced Panel Data: Calculation of index based on the first Year of observation
自从使用大型数据库以来,我再次遇到关于如何在没有循环的情况下有效地进行一些计算的问题。
底层不平衡面板数据集采用以下df1的形式。可以看出,有不同年份观察到的个体(ID)。有时也有 gab 年(见 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 )
)
您可以使用 data.table
中的 first
来只计算第一年(假设您的数据是有序的),即
library(data.table)
df1[, v3 := first(V1)/first(V2), by = ID][]
注意:您的数据(第 8 行)存在一些差异,因此结果与您发布的不一致
自从使用大型数据库以来,我再次遇到关于如何在没有循环的情况下有效地进行一些计算的问题。
底层不平衡面板数据集采用以下df1的形式。可以看出,有不同年份观察到的个体(ID)。有时也有 gab 年(见 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 )
)
您可以使用 data.table
中的 first
来只计算第一年(假设您的数据是有序的),即
library(data.table)
df1[, v3 := first(V1)/first(V2), by = ID][]
注意:您的数据(第 8 行)存在一些差异,因此结果与您发布的不一致