【问题标题】:Unbalanced Panel Data: Calculation of index based on the first Year of observation不平衡面板数据:基于第一年观察的指数计算
【发布时间】:2018-03-15 14:02:35
【问题描述】:

自从使用大型数据库以来,我再次遇到一个问题,即如何在没有循环的情况下有效地进行一些计算。

底层不平衡面板数据集采用下面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   )
                   )

【问题讨论】:

    标签: r data.table panel-data


    【解决方案1】:

    您可以使用data.table 中的first 只计算第一年(假设您的数据是有序的),即

    library(data.table)
    
    df1[, v3 := first(V1)/first(V2), by = ID][]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2023-03-11
      • 2011-06-24
      • 2018-11-24
      • 2021-09-06
      相关资源
      最近更新 更多