我整晚都在思考这个问题:这是我的矩阵:
'a' '#' 3
'#' 'a' 3
0 'I am' 2
'I am' 0 2
Run Code Online (Sandbox Code Playgroud)
.....
我想像前两行一样对待行,因为它只是'a'和'#'的不同顺序。就我而言,我想删除此类行。玩具示例很简单,前两个相同,第三个和第四个相同。但在我的数据集中,我不知道“相同”行在哪里。
我正在用 R 写。谢谢。
也许这样的事情对你有用。目前尚不清楚您想要的输出是什么。
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 包装整个内容即可查找重复的项目(行)。
对我来说,这也只产生了一个 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 的示例适用于他的示例数据。但如果您已命名列,则会失败。