代码之家  ›  专栏  ›  技术社区  ›  cliu

使用duplicated或distinct删除重复项不成功

  •  0
  • cliu  · 技术社区  · 3 年前

    我似乎很难使用 duplicated distinct 中的函数 dplyr 。我不知道问题出在哪里,但有人能帮忙吗?以下是一小部分数据作为示例:

    df <- data.frame(timestamp = c(1495115680.55608, 1495115680.58941, 
                                 1495115680.62274), id = c("2017-05-18-145157833880", "2017-05-18-145157833880", 
                                                           "2017-05-18-145157833880"), condition = c("childchild", "childchild", 
                                                                                                     "childchild"))
    

    这两个函数都无法删除重复项

    df %>%
      filter(!duplicated(timestamp))
    
    distinct(df, timestamp, .keep_all = TRUE)
       timestamp                      id  condition
    1 1495115681 2017-05-18-145157833880 childchild
    2 1495115681 2017-05-18-145157833880 childchild
    3 1495115681 2017-05-18-145157833880 childchild
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   TarJae    3 年前

    问题是由于浮点精度造成的。 时间戳只重复到小数点后的某一点。

    解决此问题的一种方法是舍入,然后应用 filter() distinct() :

    df %>%
      mutate(timestamp1 = round(timestamp, 0)) %>% 
      filter(!duplicated(timestamp1)) %>% 
      select(-timestamp1)
    
     timestamp                      id  condition
    1 1495115681 2017-05-18-145157833880 childchild