【问题标题】:R : Deleting a row when a duplicated value is in the row belowR:当重复值在下面的行中时删除一行
【发布时间】:2021-11-26 16:14:42
【问题描述】:

我正在尝试通过删除不需要的行来清理数据集。这是我的数据集的示例: 第一张图片显示了数据集,第二张图片显示了我想要实现的目标。 所以我试图删除所有具有相似 ID 但只保留顶部的行。

enter image description here

enter image description here

【问题讨论】:

    标签: r duplicates data-cleaning


    【解决方案1】:

    您可以将group_bycumsum 计数器一起使用,然后过滤掉所有后续ID:

    
    df %>%
      group_by(ID) %>%
      mutate(counter = cumsum(!is.na(ID))) %>%
      ungroup() %>%
      filter(counter == 1) %>%
      select(-counter)
    
    
    

    【讨论】:

    • 谢谢,效果很好!
    【解决方案2】:

    我们可以按 ID 分组并过滤最小值,即最早的 TIME。

    > library(dplyr)
    > df <- data.frame(LOCATION=c("A" ,"B", "C", "D", "E", "F", "G"),
    +                  TIME=c("13:00", "13:20", "13:25","13:32","13:50", "13:53", "13:58"),
    +                  ID=c("2V51","2Y89","2Y89","2Y89","2T33","2T33","2U99"))
    > 
    > df
      LOCATION  TIME   ID
    1        A 13:00 2V51
    2        B 13:20 2Y89
    3        C 13:25 2Y89
    4        D 13:32 2Y89
    5        E 13:50 2T33
    6        F 13:53 2T33
    7        G 13:58 2U99
    > 
    > df <- df %>%
    +   group_by(ID) %>%
    +   filter(TIME == min(TIME))
    > 
    > df
    # A tibble: 4 x 3
    # Groups:   ID [4]
      LOCATION TIME  ID   
      <chr>    <chr> <chr>
    1 A        13:00 2V51 
    2 B        13:20 2Y89 
    3 E        13:50 2T33 
    4 G        13:58 2U99 
    

    【讨论】:

      【解决方案3】:

      基本函数“duplicated”可以删除重复项。第一次出现时为 FALSE,重复出现时为 TRUE。

      df <- df %>% filter(!duplicated(ID)) 
      

      【讨论】:

        猜你喜欢
        • 2013-01-14
        • 2014-11-07
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        相关资源
        最近更新 更多