在 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
来实现吗?
您可以使用 rleid
和 by
:
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)]
我想在下面的数据 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
来实现吗?
您可以使用 rleid
和 by
:
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)]