删除任何其他相邻列中具有重复值的行

remove rows with duplicate values in any other adjacent column

如何删除同一行的另一列中具有相同值的行?例如,

df<-structure(list(V1 = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L), V2 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 
2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), V3 = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), row.names = c(NA, -27L
), class = "data.frame")

##Top three rows
   V1 V2 V3
1   1  1  1
2   2  1  1
3   3  1  1
4   1  2  1
5   2  2  1
6   3  2  1
7   1  3  1
8   2  3  1

在以下情况(仅显示 8 行)中,我将删除接受第 6 行和第 8 行的每一行,因为它们在同一行的任何列中都没有任何重复值。我最好寻找 data.table 解决方案,因为我有一个更大的数据框。


您可以对每一行使用 anyDuplicated

library(data.table)

setDT(df)
df[apply(df, 1, anyDuplicated) == 0]

#   V1 V2 V3
#1:  3  2  1
#2:  2  3  1
#3:  3  1  2
#4:  1  3  2
#5:  2  1  3
#6:  1  2  3 

在列上使用成对 combn 来检查是否存在相等值的选项

df[!Reduce(`|`, combn(df, 2, FUN = function(x)
     x[[1]] == x[[2]], simplify = FALSE))]
   V1 V2 V3
1:  3  2  1
2:  2  3  1
3:  3  1  2
4:  1  3  2
5:  2  1  3
6:  1  2  3