time - 提取连续几年出现的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 也出现两次,但不是连续出现,其他是唯一条目。
解决方案
当然有几种方法可以做到这一点。一种相当简单的方法(假设年份已经按照您的数据示例进行排序)是首先计算每个 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。)min
diff
现在,想要的 ID 是最小年差为 1 的 ID(这意味着 ID 在连续年份出现);它们可以通过以下方式轻松提取:
mdu$ID[mdu$Year==1]
推荐阅读
- asp.net - 如何在 ASP.NET MVC 项目中添加和使用 MessageQueues?
- xml - 使用 XSLT 从 XML 中选择特定元素
- apache-kafka - 是什么导致“分区没有提交的偏移量”,然后是 IllegalStateException
- java - Redis SCAN 返回无效游标
- sql - 如何在 T-SQL 中将此数据转换为逗号分隔值
- javascript - 使用自定义绑定提供程序时,带有函数的 Knockout 'attr' 数据绑定会引发错误
- mongodb - Sails,EJS 数据未在 forEach 循环中定义
- android - 如何将 Room TypeConverter 应用于实体的单个字段?
- kdevelop - Kdevelop:默认项目过滤器
- excel - VBA 不会复制下一个表,而是继续粘贴第一个表