2014-01-14 65 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