【问题标题】:R: remove duplicated values in across rows and columnsR:删除跨行和跨列的重复值
【发布时间】:2015-09-25 09:48:27
【问题描述】:

我找到了很多关于在列表中查找重复元素或在数据框中查找重复行的页面。但是,我想在整个数据框中搜索重复的元素。以此为例:

df
     coupon1    coupon2    coupon3
1         10         11         12
2         13         16         15
3         16         17         18
4         19         20         21
5         22         23         24
6         25         26         27

您会注意到 df[2,2] 和 df[3,1] 具有相同的元素 (16)。当我跑步时

duplicated(df)

它返回六个“FALSE”,因为整行没有重复,只有一个元素。如何检查 整个 数据框中的 any 重复值?我既想知道重复项的存在,也想知道它的值(如果有多个重复项也是一样的)。

【问题讨论】:

  • 映射到向量是否足以满足您的目的:duplicated(matrix(df, ncol=1))
  • 唯一的问题是这个矩阵可以有数千行长,所以我正在寻找一种将它作为数据框处理的解决方案。

标签: r duplicates


【解决方案1】:

这将找到全局欺骗,但它会按列搜索。所以 (3,1) 仍然是 FALSE,因为它是数据框中的第一个值 16

m <- matrix(duplicated(unlist(df)), ncol=ncol(df))
#      [,1]  [,2]  [,3]
#[1,] FALSE FALSE FALSE
#[2,] FALSE  TRUE FALSE
#[3,] FALSE FALSE FALSE
#[4,] FALSE FALSE FALSE
#[5,] FALSE FALSE FALSE
#[6,] FALSE FALSE FALSE

然后您可以随意使用它,例如:

df[m]
#[1] 16

【讨论】:

    【解决方案2】:
    which(duplicated(stack(yourdf)[,1]))
    [1] 8
    stack(yourdf)[,1][which(duplicated(stack(yourdf)[,1]))]
    [1] 16
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 2021-12-30
      • 2015-01-21
      • 2020-06-12
      相关资源
      最近更新 更多