首页 > 解决方案 > R dplyr - 使用 dplyr 过滤每个组中的唯一行

问题描述

我的数据看起来像这样

id     col2     col3    flag    val
1       a         q 
1       a         w        1
1       b         r    
2       c         q        1      5
2       c         q
2       c         q        1      6    

我只想要这些行

id    col2      col3     flag    val
1       a         q 
1       a         w        1  
1       b         r    
2       c         q        1      5

基本上前 3 列确定 a group。对于每个group,如果只有 1 个观察值/行,则无论 的值flag是什么,都保留该行。如果每个group都有超过 1 个观察/行,则保留第一行等于 1。我想知道在 R 中是否有任何方法可以使用groupdplyrflag

标签: rdplyr

解决方案


dplyr::distinct正是在这一点上有所帮助,并且该.keep_all标志将其他列保留在您的输出中。

my_data %>%
  distinct(id, col2, col3, .keep_all = TRUE)

结果

# A tibble: 4 x 5
     id col2  col3   flag   val
  <int> <chr> <chr> <int> <int>
1     1 a     q        NA    NA
2     1 a     w         1    NA
3     1 b     r        NA    NA
4     2 c     q         1     5

数据

my_data <- tibble::tribble(
  ~id, ~col2, ~col3, ~flag, ~val,
   1L,   "a",   "q",    NA,   NA,
   1L,   "a",   "w",    1L,   NA,
   1L,   "b",   "r",    NA,   NA,
   2L,   "c",   "q",    1L,   5L,
   2L,   "c",   "q",    NA,   NA,
   2L,   "c",   "q",    1L,   6L
  )

推荐阅读