R:在行和列之间删除重复值

3
我发现了很多关于在列表中查找重复元素或在数据帧中查找重复行的页面。然而,我想搜索整个数据帧中的重复元素。以这个为例:
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”,因为整行没有重复,只有一个元素。如何检查整个数据框中是否存在任何重复值?我想知道重复项的存在,并知道其值(如果有多个重复项,则也是如此)。


对于您的目的,将其映射到向量是否足够:duplicated(matrix(df, ncol=1)) - mts
唯一的问题是这个矩阵可能有数千行,因此我正在寻找将其处理为数据框的解决方案。 - Kira Tebbe
2个回答

2

这将查找全局重复项,但它是按列搜索的。因此,(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

1
which(duplicated(stack(yourdf)[,1]))
[1] 8
stack(yourdf)[,1][which(duplicated(stack(yourdf)[,1]))]
[1] 16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接