去除纵向数据中的不连续时间点

问题描述

我有一个公司年的纵向数据,但有些公司的年份不连续,例如

library(data.table)
dt = data.table(firm_id=c(rep(1,5),rep(2,5)),year=c(1990,1991,1999,2000,2001,1995,1997,2008,2009,2010))

对于每家公司,我想保留最近连续几年的观察结果并删除其他观察结果。例如,公司 1 在 (1990,2001) 中有五年观察,我想保留 (1999,2001)

data.table(firm_id=c(rep(1,3),3)),year=c(1999,2010))

我能想到一些笨拙的方法来解决这个问题,但我想知道是否有一种简单的方法来解决它。

受评论启发,我也想知道有没有什么方法可以保持最长连续向量块的年数。例如,

library(data.table)
dt = data.table(firm_id=c(rep(1,1992,2010))

结果是

enter image description here

解决方法

library(data.table)
DT2 <- setorder(dt,firm_id,year)[,d := cumsum(c(TRUE,diff(year) > 1)),by = .(firm_id) ][,n := .N,by = .(firm_id,d) ]

DT2
#     firm_id  year     d     n
#       <num> <num> <int> <int>
#  1:       1  1990     1     3
#  2:       1  1991     1     3
#  3:       1  1992     1     3
#  4:       1  2000     2     2
#  5:       1  2001     2     2
#  6:       2  1995     1     1
#  7:       2  1997     2     1
#  8:       2  2008     3     3
#  9:       2  2009     3     3
# 10:       2  2010     3     3

从这里开始,如果您想要连续运行 3 年或更长时间,那么

DT2[ (n > 2),]

如果您希望每个 firm_id 的运行时间最长,那么

DT2[,.SD[n == max(n),],by = .(firm_id) ]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...