我试图根据两个向量中元素的匹配来识别重复项。使用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。非常感谢任何想法。
答案 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)
只是为每一行添加一个元素索引