如何在R的data.table中为每个ID按年份顺序生成观测次数变量
使用data.table为面板数据添加组内观测序号
当然可以用data.table轻松搞定这个需求!这是处理面板数据时非常常见的操作,核心就是按个体分组后生成组内递增的序号。
步骤1:构造示例数据
首先先还原你的示例数据表:
library(data.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) )
步骤2:添加crop变量
直接用data.table的分组赋值语法就能实现:
# 按ID分组,生成组内从1开始的递增序号 DT[, crop := seq_len(.N), by = ID]
代码解释:
by = ID:指定按ID分组,每个组对应一个个体的所有观测.N是data.table的内置变量,代表当前分组内的总行数seq_len(.N)会生成一个从1到.N的整数序列,正好对应每个观测在组内的第n次记录
额外提醒:确保年份顺序
如果你的原始数据中,某些ID的year可能不是按时间顺序排列的(比如数据导入时顺序混乱),建议先按ID和year排序,再生成序号,保证结果准确:
# 先排序,再生成序号 DT <- DT[order(ID, year)] DT[, crop := seq_len(.N), 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
内容的提问来源于stack exchange,提问作者codemachino
相关产品推荐
相关产品推荐

