【问题标题】:Find All Unique rows based on single column and exclude all duplicate rows基于单列查找所有唯一行并排除所有重复行
【发布时间】:2023-03-16 19:20:01
【问题描述】:

我有两个要求

  1. 在单列中查找所有重复值
  2. 查找所有唯一行 [与第一个问题相反] 这不应包括重复行中的单个对

我从过去 2 周开始学习。看 YouTube 视频,推荐 Stackoverflow 和其他网站,所以不多。如果有任何材料或课程,请参考。

所以回答我在这里找到的第一个问题 (Find duplicated elements with dplyr)

# All duplicated elements
mtcars %>%
  filter(carb %in% unique(.[["carb"]][duplicated(.[["carb"]])]))

所以我想要相反的

谢谢

附:我没有技术背景。我在这里经历了几个问题和答案,所以我可能已经找到答案或需要一些调整,我完全忽略了这一点

【问题讨论】:

  • 你需要mtcars %>% + filter(!(carb %in% unique(.[["carb"]][duplicated(.[["carb"]])])))
  • 这还不清楚。一方面,“在单列中查找所有重复值并返回所有行 [2 或更多]”不是语法句子。另一方面,您还没有提供有关您的数据是什么样子的任何想法。

标签: r


【解决方案1】:

您可能已经意识到,uniqueduplicated 并不是您所需要的,因为它们本质上会导致所有不同值的保留,并且只会折叠这些值的“多个副本”。

对于您的第一个问题,您可以group_by您感兴趣的列,然后只保留那些包含多行的组(通过filter):

mtcars %>%
    group_by(mpg) %>%
    filter(length(mpg) > 1) %>%
    ungroup()

此示例选择所有重复 mpg 值的行。这是因为,当应用于组时,诸如filter 之类的 dplyr 操作会单独作用于每个组。这意味着上面代码中的length(mpg)会分别返回每组的mpg列向量的长度。

要反转逻辑,只要反转过滤条件即可:

mtcars %>%
    group_by(mpg) %>%
    filter(length(mpg) == 1) %>%
    ungroup()

【讨论】:

  • 是的,完美。你的两个答案都对我有用。谢谢。
猜你喜欢
  • 2013-06-13
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2014-03-23
  • 2017-07-16
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多