【问题标题】:Filter rows based on a ID column in R根据 R 中的 ID 列过滤行
【发布时间】:2021-08-16 22:39:10
【问题描述】:

我有一个带有 ID 列、时间点和状态的数据框。每个 ID 都有多个时间点和与每个时间点关联的状态。我想过滤与 ID 关联的所有时间点具有相同状态的所有 ID。如何使用 R dpylr 实现这一目标?

下面是一个示例数据集

ID Time Status
A 1 X
A 2 X
A 3 Y
A 4 Z
B 1 X
B 2 X
B 3 X
C 1 Z
C 2 Z
D 1 X
E 1 X
E 2 Y

预期的数据帧

ID Time Status
B 1 X
B 2 X
B 3 X
C 1 Z
C 2 Z
D 1 X

【问题讨论】:

    标签: r filter dplyr conditional-statements data-transform


    【解决方案1】:

    这行得通吗:

    library(dplyr)
    df %>% group_by(ID) %>% filter(length(unique(Status)) == 1)
    # A tibble: 6 x 3
    # Groups:   ID [3]
      ID     Time Status
      <chr> <dbl> <chr> 
    1 B         1 X     
    2 B         2 X     
    3 B         3 X     
    4 C         1 Z     
    5 C         2 Z     
    6 D         1 X   
    

    【讨论】:

    • 您可以通过使用dplyr::n_distinct() 而不是length(unique(...)) 来简化此操作。
    【解决方案2】:

    我们可以使用

    library(data.table)
    setDT(df)[, .SD[uniqueN(Status)==1], ID]
    

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 2021-09-16
      • 2021-06-25
      • 2013-09-06
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多