识别R中向量中的唯一重复项

时间:2014-01-14 01:03:24

标签: r duplicates match

我试图根据两个向量中元素的匹配来识别重复项。使用duplicate()提供了所有匹配的向量,但是我想索引哪些匹配或不匹配。使用以下代码作为示例:

x <- c(1,6,4,6,4,4)             
y <- c(3,2,5,2,5,5)         

frame <- data.frame(x,y)        
matches <- duplicated(frame) | duplicated(frame, fromLast = TRUE)   
matches
[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

最终,我想创建一个向量,标识元素2和4是匹配以及3,5,6。非常感谢任何想法。

3 个答案:

答案 0 :(得分:4)

另一个data.table答案,使用组计数器.GRP为每个不同的元素分配标签:

d <- data.table(frame)
d[,z := .GRP, by = list(x,y)]
#    x y z
# 1: 1 3 1
# 2: 6 2 2
# 3: 4 5 3
# 4: 6 2 2
# 5: 4 5 3
# 6: 4 5 3

答案 1 :(得分:1)

使用merge针对每行的unique种可能性,您可以获得结果:

labls <- data.frame(unique(frame),num=1:nrow(unique(frame)))
result <- merge(transform(frame,row = 1:nrow(frame)),labls,by=c("x","y"))
result[order(result$row),]

#  x y row num
#1 1 3   1   1
#5 6 2   2   2
#2 4 5   3   3
#6 6 2   4   2
#3 4 5   5   3
#4 4 5   6   3

result$num向量给出了组。

答案 2 :(得分:1)

plyr::ddply()

的情况如何
ddply(cbind(index=1:nrow(frame),frame),.(x,y),summarise,count=length(index),elems=paste0(index,collapse=","))

  x y count elems
1 1 3     1     1
2 4 5     3 3,5,6
3 6 2     2   2,4

NB =表达式cbind(index=1:nrow(frame),frame)只是为每一行添加一个元素索引