【问题标题】:R - How do I remove duplicates *without* retaining a single duplicated row? [duplicate]R - 如何删除重复项*而不*保留单个重复行? [复制]
【发布时间】:2019-03-20 19:51:25
【问题描述】:

我正在尝试删除房地产销售数据数据框中的重复项。有时,一份契约将包含许多包裹作为销售的一部分。因为数据是按包裹进行的,所以一次销售显示为几行,每个不同的包裹但具有相同的契约号和销售价格 - 我们不希望这些在我们的数据集中。

我想完全删除它们,而不保留一行。使用 duplicated() 或 unique() 将删除重复项,但将保留一行重复值,以便新数据框包含该列的唯一值。这对我们不起作用——我们想完全摆脱所有重复的行。那么,我怎样才能识别出 deed_number 销售价格是重复的,并在不保留任何行的情况下删除 所有 行?

【问题讨论】:

    标签: r data-science


    【解决方案1】:

    您可以通过分组变量执行count,并且只保留计数等于一的记录:

    library(tidyverse)
    
    df <- tibble(
      deed = c(1, 1, 1, 2, 3, 3, 4, 5),
      price = c(10, 10, 10, 20, 30, 30, 40, 50)
    )
    df
    #> # A tibble: 8 x 2
    #>    deed price
    #>   <dbl> <dbl>
    #> 1     1    10
    #> 2     1    10
    #> 3     1    10
    #> 4     2    20
    #> 5     3    30
    #> 6     3    30
    #> 7     4    40
    #> 8     5    50
    
    df %>%
      count(deed, price) %>%
      filter(n == 1)
    #> # A tibble: 3 x 3
    #>    deed price     n
    #>   <dbl> <dbl> <int>
    #> 1     2    20     1
    #> 2     4    40     1
    #> 3     5    50     1
    

    reprex package (v0.2.1) 于 2019-03-20 创建

    【讨论】:

    • 我猜这会删除其他列(如果有的话),但您也可以选择df %&gt;% group_by(deed, price) %&gt;% filter(n() == 1)
    • @Frank 正确,或者直接使用 add_count
    • 效果很好,谢谢。
    猜你喜欢
    • 2016-12-28
    • 2016-09-18
    • 2018-10-14
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多