识别重复项并标记第一次出现和所有其他出现

时间:2013-04-28 17:46:23

标签: r duplicates

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

例如:

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次。

2 个答案:

答案 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