【问题标题】:R filter per group for first and last timepoints only仅针对第一个和最后一个时间点的每组 R 过滤器
【发布时间】:2022-11-23 01:56:09
【问题描述】:

我有一个包含列名 ID、日期、覆盖范围的数据集。每个 ID 都有不同数量的日期。 Coverage 是一个 0-3 的整数。我想过滤这个数据集,以便 coverage==3 只针对最早和最后一个时间点。 输入示例:

ID date coverage
001 2012-12-24 2
001 2013-12-04 3
001 2014-12-14 1
001 2015-12-02 3
001 2016-12-02 0
002 2012-01-15 3
002 2013-11-15 1
002 2014-11-15 3
003 2019-01-15 1
003 2020-11-15 1
003 2021-11-15 3

示例输出:

ID date coverage
001 2013-12-04 3
001 2014-12-14 1
001 2015-12-02 3
002 2012-01-15 3
002 2013-11-15 1
002 2014-11-15 3
003 2021-11-15 3

【问题讨论】:

    标签: r dplyr filter


    【解决方案1】:

    我们arrange'ID','date',按'ID'分组,slice从第3个值到last的行

    library(dplyr)
    df1 %>%
       arrange(ID, date) %>%
       group_by(ID) %>%
       slice(match(3, coverage):last(which(coverage == 3))) %>%
       ungroup
    

    -输出

    # A tibble: 7 × 3
         ID date       coverage
      <int> <date>        <int>
    1     1 2013-12-04        3
    2     1 2014-12-14        1
    3     1 2015-12-02        3
    4     2 2012-01-15        3
    5     2 2013-11-15        1
    6     2 2014-11-15        3
    7     3 2021-11-15        3
    

    数据

    df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
    3L), date = structure(c(15698, 16043, 16418, 16771, 17137, 15354, 
    16024, 16389, 17911, 18581, 18946), class = "Date"), coverage = c(2L, 
    3L, 1L, 3L, 0L, 3L, 1L, 3L, 1L, 1L, 3L)), row.names = c(NA, -11L
    ), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多