【问题标题】:Find the duplicated rows of a dataframe and which original row the duplicated row is corresponding in R查找数据帧的重复行以及重复行在 R 中对应的原始行
【发布时间】:2015-02-16 00:02:02
【问题描述】:

我的数据框看起来像:

 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

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

【问题讨论】:

  • 这是以前的answer 这个问题。
  • @User7598 恐怕他们没有回答我的问题。这些先前的答案是关于如何返回数据帧的非重复行。我的问题是关于如何返回重复行对应的原始数据集的索引。

标签: r duplicates


【解决方案1】:

我可能会使用 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

【讨论】:

  • 我不知道 data.table。谢谢。
  • 你能告诉我.I指的是什么吗?
  • @ThePrincess -- 对于每组行,.I 给出这些行相对于整个 data.frame 的行索引。因此,例如,对于同时具有 a=3b=3 的行组(即第 1 行和第 5 行),.Ic(1,5).I[1] 因此返回该组中第一次出现的行的索引。
猜你喜欢
  • 2014-12-29
  • 2013-08-14
  • 2020-06-10
  • 2012-07-20
  • 2016-11-03
  • 2021-06-22
  • 1970-01-01
  • 2015-04-12
相关资源
最近更新 更多