【问题标题】:Extract which ID appears in consecutive years提取连续几年出现的ID
【发布时间】:2021-10-06 00:44:18
【问题描述】:

我在尝试从我的数据中仅提取至少连续两年出现的 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

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

【问题讨论】:

    标签: time conditional-statements logic extract series


    【解决方案1】:

    当然有几种方法可以做到这一点。一种相当简单的方法(假设年份已经按照您的数据示例进行排序)是首先计算每个 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 用于消除来自 min 的警告,因为该列表来自空的 diff 列表,来自仅在一年内出现的 ID。)

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

    mdu$ID[mdu$Year==1]
    

    【讨论】:

    • 抱歉回复晚了,非常方便的处理方法!无限感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多