R语言 当其顺序颠倒时,识别重复的值对[重复]

xwmevbvl  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(107)

这个问题已经有答案了

Remove duplicate rows by considering two columns and ignore the order [duplicate](1个回答)
10天前关闭。

df <- data.frame(A = c(LETTERS[1:6], "A"),
                 B = c(rev(LETTERS[1:6]), "F"))

字符串
如何计算不唯一的行的数量?该函数需要识别逆序对。
在上面的例子中,没有任何唯一的字母组合(3 x A/F; 2 x B/E,2 x C/D),所以答案是“0”。
(字母可以替换为任何字符串或因子水平)

vlurs2pr

vlurs2pr1#

可以先对行进行排序(使用sort),然后再计数(使用table)。我使用paste0(x, collapse = "")将有序的值对组成一个唯一的字符串。

(tab <- table(apply(df, 1, \(x) paste0(sort(x), collapse = ""))))
# AF BE CD 
#  3  2  2 

sum(tab == 1)
#[1] 0

字符串

roejwanj

roejwanj2#

按行排序,然后检查是否重复:

x <- cbind(pmin(df$A, df$B), pmax(df$A, df$B))
#     [,1] [,2]
# [1,] "A"  "F" 
# [2,] "B"  "E" 
# [3,] "C"  "D" 
# [4,] "C"  "D" 
# [5,] "B"  "E" 
# [6,] "A"  "F" 
# [7,] "A"  "F" 

df[ !(duplicated(x) | duplicated(x, fromLast = TRUE)), ]
# [1] A B
# <0 rows> (or 0-length row.names)

字符串

disho6za

disho6za3#

第一条评论:“AF”在您的设置中确实出现了两次.
如果你想知道有多少非唯一行出现,你可以计算行数,唯一行和子行的数量(这里给出“1”作为结果)

df <- data.frame(A = c(LETTERS[1:6], "A"),
                 B = c(rev(LETTERS[1:6]), "F"))
nrow(df)   # returns 7, number of rows
nrow(unique(df))  # returns 6, number of unique rows
result <- nrow(df) - nrow(unique(df))  # returns 1, number of non-unique rows

字符串

相关问题