查找数据框的重复行以及R中重复行所对应的原始行

时间:2015-02-16 00:02:02

标签: r duplicates

我的数据框架如下:

 data <- data.frame(a=c(3,1,2,2,2,3),b=c(3,1,1,2,2,3))

 duplicated(data)

 [1] FALSE FALSE FALSE FALSE  TRUE  TRUE

我想要的不仅是指示哪一行是重复的逻辑字符串,还有重复行所对应的原始行。在上面的示例中,第五行是原始数据帧中第四行的副本,第六行是原始数据帧中第一行的副本。所以我想要一个索引向量,如:

   NA NA NA NA 4 1

(NA表示非重复行)。

我天真的做法是:

  dupTF <- duplicated(data)
  DupDat <- data[dupTF,]
  index0 <- rep(NA,nrow(DupDat))
  for (i in 1 : nrow(DupDat))
  {
     for (j in 1 : nrow(data))
        {
          if(all(data[j,] == DupDat[i,])) break;
        }
       index0[i] <- j
   }
  index <- rep(NA,length(dupTF))
  index[dupTF]<- index0
  index
  [1] NA NA NA NA  4  1

但是,这种方法并不理想,因为它会遍历所有数据......

1 个答案:

答案 0 :(得分:2)

我可能会使用 data.table ,因为其.I.N个变量(可从每个by组中获取)可以这样做简单的:

library(data.table)
dt <- data.table(data)
dt[, XX:=c(NA, rep(.I[1], .N-1)), by=c("a","b")][,XX]
# [1] NA NA NA NA  4  1