R, 查找重复行,不分顺序

Jia*_* Du 2 duplicate-data r

我整晚都在思考这个问题:这是我的矩阵:

'a' '#' 3
'#' 'a' 3
 0  'I am' 2
'I am' 0 2
Run Code Online (Sandbox Code Playgroud)

.....

我想像前两行一样对待行,因为它只是'a'和'#'的不同顺序。就我而言,我想删除此类行。玩具示例很简单,前两个相同,第三个和第四个相同。但在我的数据集中,我不知道“相同”行在哪里。

我正在用 R 写。谢谢。

A5C*_*2T1 5

也许这样的事情对你有用。目前尚不清楚您想要的输出是什么。

x <- structure(c("a", "#", "0", "I am", "#", "a", "I am", "0", "3", 
                 "3", "2", "2"), .Dim = c(4L, 3L))
x
#      [,1]   [,2]   [,3]
# [1,] "a"    "#"    "3" 
# [2,] "#"    "a"    "3" 
# [3,] "0"    "I am" "2" 
# [4,] "I am" "0"    "2" 


duplicated(
  lapply(1:nrow(x), function(y){
    A <- x[y, ]
    A[order(A)]
  }))
# [1] FALSE  TRUE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

这基本上按行拆分矩阵,然后对每一行进行排序。duplicated也适用于lists,因此您只需用 `duplicated 包装整个内容即可查找重复的项目(行)。


ago*_*dev 5

对我来说,这也只产生了一个 FALSE 向量,这意味着它没有检测到重复项。我想这就是发生的事情:我在 x 中分配了列名。因此,虽然order(A)对行进行了整齐的排序并返回带有列名称的行的有序版本,但 lapply 生成的对象尊重列名称并移交给duplicated()列完整的版本(因为名称)。因此, 考虑的内容duplicated()与 x 相同!

我这样做的灵感来自@A Handcart And Mohair 的答案,它对我有用:

duplicated(t(apply(x, 1, sort)))
Run Code Online (Sandbox Code Playgroud)

它也更短;)

请注意,@A Handcart And Mohair 的示例适用于他的示例数据。但如果您已命名列,则会失败。