首页 > 解决方案 > 使用 dplyr 删除数据框中的组

问题描述

我需要帮助才能删除我在 COL3 中具有 1 个唯一值的组。这是df

 COL1 COL2           COL3   COL4
    G1   SEQ1_-_eje.2   SEQB87 A
    G1   SEQ.2_+_eje.2  SQB83  B 
    G1   SEQ.2_+_eje.2  SQB800 C
    G1   SEQ1_-_eje.2   SEB900 D
    G2   SEQJ_-_eje.9   SEQOPL E
    G2   SEQJ_-_eje.7   SEQOPL F
    G2   SEQJ_-_eQe.3   SEQOPL G
    G3   SEQQ_+_eje.2   LOP2   H
    G3   SEQQ_-_eje.2   LOPE   I

这里只有G2一个唯一的COL3SEQOPL,所以我删除了这个组并保留了它G1G3它们分别具有不同的元素。32 COL3

预期结果 :

 COL1 COL2           COL3   COL4
    G1   SEQ1_-_eje.2   SEQB87 A
    G1   SEQ.2_+_eje.2  SQB83  B 
    G1   SEQ.2_+_eje.2  SQB800 C
    G1   SEQ1_-_eje.2   SEB900 D
    G3   SEQQ_+_eje.2   LOP2   H
    G3   SEQQ_-_eje.2   LOPE   I

也许这个想法是删除length(unique(df$COL3))=1?

标签: rdataframedplyr

解决方案


你的想法是正确的,诀窍是先分组COL1

df <- data.frame(COL1 = c(rep("G1", 4), rep("G2", 3), rep("G3", 2)),
                 COL3 = c("SEQB87", "SQB83", "SQB800", "SQB900",
                          rep("SEQOPL", 3), "LOP2", "LOPE"),
                 COL4 = LETTERS[1:9])

library(dplyr)

df %>% 
  group_by(COL1) %>% 
  filter(length(unique(COL3)) > 1)

# A tibble: 6 x 3
# Groups:   COL1 [2]
  COL1  COL3   COL4 
  <fct> <fct>  <fct>
1 G1    SEQB87 A    
2 G1    SQB83  B    
3 G1    SQB800 C    
4 G1    SQB900 D    
5 G3    LOP2   H    
6 G3    LOPE   I  

推荐阅读