删除重复的元素组合后返回矩阵

问题描述 投票:0回答:1

我正在尝试获取一个矩阵,其中重复项的成对组合已被删除。

例如:

m <- cbind(c("A", "B"), c("B", "A"))

由于

BA
AB
的重复项,我将其从矩阵中删除

m[!duplicated(t(apply(m, 1, sort))), ]

返回一个向量

"A" "B"

而不是

nrow
为 1 的矩阵。

     [,1] [,2]
[1,] "A"  "B" 

如果我使用

as.matrix(m)
,我会得到

     [,1]
[1,] "A" 
[2,] "B" 

而不是

     [,1] [,2]
[1,] "A"  "B" 

这只发生在

nrow = 1
。如果返回更多行,结果将保留为
matrix
:

m <- cbind(c("A", "B", "A"), c("B", "A", "C"))
m[!duplicated(t(apply(m, 1, sort))), ]

这给出了

     [,1] [,2]
[1,] "A"  "B" 
[2,] "A"  "C"  

如何获得一个只返回一行的矩阵。上例中只返回向量而不返回矩阵是什么原因?

r
1个回答
0
投票

这是由于

m[!duplicated(t(apply(m, 1, sort))), ]
返回了一个字符。 你可以写一个小函数,比如

f = \(m) {
  stopifnot(is.matrix(m))
  m = m[!duplicated(t(apply(m, 1, sort))), ]
  if(is.character(m)) m = t(as.matrix(m))
  m
}

然后做

m = cbind(c("A", "B"), c("B", "A"))
n = cbind(c("A", "B", "A"), c("B", "A", "C"))
lapply(list(m, n), f)
#> [[1]]
#>      [,1] [,2]
#> [1,] "A"  "B" 
#> 
#> [[2]]
#>      [,1] [,2]
#> [1,] "A"  "A" 
#> [2,] "B"  "C"
© www.soinside.com 2019 - 2024. All rights reserved.