2014-01-14 36 views
1

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

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的载体。任何想法都不胜感激。

+1

请张贴一个向量应该是什么样子的例子。你如何确定元素2和元素4是否匹配?通过给他们相同的价值? –

回答

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)只是增加了一个元件索引到每一行

1

使用mergeunique可能性的每一行,你可以得到一个结果:

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矢量给出的组。

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 
+0

与我的结果相同,但使用'data.table'的效率更高! – thelatemail