12

我正在尝试识别在矩阵中表示两次或多次的所有行。

例如:

m <- matrix(c(1,2,1,3,1,4,1,2,2,3,2,3,1,2,5), ncol = 3)
m
duplicated(m[,1])

输出:

     [,1] [,2] [,3]
[1,]    1    4    2
[2,]    2    1    3
[3,]    1    2    1
[4,]    3    2    2
[5,]    1    3    5

[1] FALSE FALSE  TRUE FALSE  TRUE

但是,我不想要那个输出。我想:

[1] TRUE FALSE TRUE FALSE TRUE

因为 row[1,1] 的值在 m 的第 1 列中出现了 3 次。

4

2 回答 2

18

当我看到这个问题时,我问自己“Jim Holtman 或 Bill Dunlap 对 Rhelp 有何建议?”。没有查看档案,但我认为他们可能建议使用 的两个“并行”应用程序duplicated,一个使用默认值,一个使用fromLast参数并与向量 OR ( |) 运算符结合。

duplicated(m[,1]) | duplicated(m[,1], fromLast=TRUE)
[1]  TRUE FALSE  TRUE FALSE  TRUE
于 2013-04-28T18:35:05.533 回答
3

这是许多方法中的一种:

m <- matrix(c(1,2,1,3,1,4,1,2,2,3,2,3,1,2,5), ncol = 3)

x <- table(m[,1])
as.character(m[,1]) %in% names(x)[x > 1]

## > as.character(m[,1]) %in% names(x)[x > 1]
## [1]  TRUE FALSE  TRUE FALSE  TRUE

# or wrap it up as function:

FUN <- function(vec) {
    x <- table(vec)
    as.character(vec) %in% names(x)[x > 1]
}

FUN(m[, 1])

## > FUN(m[, 1])
## [1]  TRUE FALSE  TRUE FALSE  TRUE
于 2013-04-28T17:56:17.253 回答