首页 > 解决方案 > 提取连续几年出现的ID

问题描述

我在尝试仅从我的数据中提取至少连续两年出现的 ID 时遇到了麻烦。我找不到解决方案的类似问题,如果这个问题是某种重复的,非常抱歉。我将创建一个数据示例:

ID= c(1, 2, 1, 3, 4, 2, 1, 5, 4, 1, 2, 6, 7, 3, 1, 2,6,9,5) 年= c(2006, 2006, 2006, 2006, 2006, 2006, 2006,2006, 2007,2007,2007,2007,2007,2007,2007,2007,2008,2008,2008) DF<- data.frame(ID, Year)

我想得到一个结果,显示哪些 ID 仅在连续年份出现,即 ID 1、2、3、4 和 6,因为 5 也出现两次,但不是连续出现,其他是唯一条目。

标签: timeconditional-statementslogicextractseries

解决方案


当然有几种方法可以做到这一点。一种相当简单的方法(假设年份已经按照您的数据示例进行排序)是首先计算每个 ID 的唯一年份差异的最小值:

mdu = aggregate(Year~ID, DF, function(y) suppressWarnings(min(diff(unique(y)))))

这产生(与您的数据示例):

  ID Year
1  1    1
2  2    1
3  3    1
4  4    1
5  5    2
6  6    1
7  7  Inf
8  9  Inf

(用于消除来自空列表suppressWarnings的警告,来自仅在一年内出现的 ID。)mindiff

现在,想要的 ID 是最小年差为 1 的 ID(这意味着 ID 在连续年份出现);它们可以通过以下方式轻松提取:

mdu$ID[mdu$Year==1]

推荐阅读