在 R 中使用 data.table 为每个观察创建 n+1 变量?

Creating n+1 variable for every observation using data.table in R?

我想在下面的数据 table 中添加一个变量,根据 year 计算 ID 按时间顺序观察到的第 n^次? (即对于某个 ID 的每一行,新变量增加 +1)。 这是我正在处理的面板数据示例 table:

DT <- data.table("ID"=c(1,1,1,1,2,2,3,3,3),
  "year"=c(2005,2006,2007,2008,2014,2015,2008,2009,2010))

ID, year
1, 2005
1, 2006
1, 2007
1, 2008
2, 2014
2, 2015
3, 2008
3, 2009
3, 2010

这是使用新变量 crop 的所需输出:

ID, year, crop
1, 2005, 1
1, 2006, 2
1, 2007, 3
1, 2008, 4
2, 2014, 1
2, 2015, 2
3, 2008, 1
3, 2009, 2
3, 2010, 3

这可以使用 data.table 来实现吗?

您可以使用 rleidby:

DT[,crop:=rleid(year),by=ID][]

   ID year crop
1:  1 2005    1
2:  1 2006    2
3:  1 2007    3
4:  1 2008    4
5:  2 2014    1
6:  2 2015    2
7:  3 2008    1
8:  3 2009    2
9:  3 2010    3

我们可以使用 rowid

DT[, crop := rowid(ID)]