我正在尝试识别在矩阵中表示两次或更多次的所有行。
例如:
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
因为行[1,1]的值在m的第1列中出现3次。
答案 0 :(得分:14)
当我看到这个问题时,我问自己“吉姆霍尔特曼或比尔邓拉普会对瑞尔普提出什么建议?”。没有查看档案,但我认为他们可能建议使用duplicated
的两个“并行”应用程序,一个使用默认值,一个使用fromLast参数并与向量OR运算符结合使用。
duplicated(m[,1]) | duplicated(m[,1], fromLast=TRUE)
[1] TRUE FALSE TRUE FALSE TRUE
答案 1 :(得分:2)
以下是许多人的一种方法:
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