【问题标题】:Filtering a dataframe showing only duplicates过滤仅显示重复项的数据框
【发布时间】:2017-09-16 12:50:24
【问题描述】:

我需要一些帮助来过滤数据框。

df 有几列,我想把它分成两个数据框:

1- 仅包括第一列重复的行(包括所有副本)。

2- 其余行,不重复。

这是一个例子: 这将是原始的。

          V1  V2 
    [1,] "A" "1"
    [2,] "B" "1"
    [3,] "A" "1"
    [4,] "C" "2"
    [5,] "D" "3"
    [6,] "D" "4"

我想变成这样:

         V1  V2 
   [1,] "A" "1"
   [2,] "A" "1"
   [3,] "D" "3"
   [4,] "D" "4"

还有这个:

        V1  V2 
  [1,] "B" "1"
  [2,] "C" "2"

有没有办法做到这一点?我曾尝试导出到 Excel,但数据集太大而无法实现。

谢谢

【问题讨论】:

标签: r filter duplicates


【解决方案1】:

考虑到df 作为您的输入,您可以使用dplyr 并尝试:

df %>% group_by(V1) %>% filter(n() > 1)

对于重复项

df %>% group_by(V1) %>% filter(n() == 1)

用于唯一条目。

【讨论】:

    【解决方案2】:

    您可以使用duplicated,但请记住duplicated 仅在第一个重复值处返回TRUE,即

    > duplicated(c("A", "A", "A"))
    [1] FALSE  TRUE  TRUE 
    

    不会为第一个 "A" 返回 TRUE。如果您想捕获 "A" 的所有值,您可以例如使用

    duplicated(c("A", "A", "A")) | duplicated(c("A", "A", "A"), fromLast = TRUE)
    # [1] TRUE TRUE TRUE
    

    然后您可以使用

    分离您的数据
    ## Index of the duplicated values:
    indDuplicatedVec <- duplicated(d[,1]) | duplicated(d[,1], fromLast = TRUE)
    
    myDuplicates <- d[indDuplicatedVec, ]
    myUniques <- d[!indDuplicatedVec, ]
    
    > myDuplicates
    #V1 V2
    #1  A  1
    #3  A  1
    #5  D  3
    #6  D  4
    
    > myUniques
    #V1 V2
    #2  B  1
    #4  C  2
    

    【讨论】:

      【解决方案3】:

      我们可以使用data.table

      library(data.table)
      setDT(df)[, .SD[.N >1], V1]
      

      【讨论】:

        【解决方案4】:

        试试

        d[!duplicated(d),]

        d[duplicated(d),]

        d 是您的数据库。

        === 更新 === 如果只需要第一列,并且所有重复项都需要放在单独的列中,您可以这样做:

        library(gdata) d[duplicated2(d$V1,bothWays = T),] d[!duplicated2(d$V1,bothWays = T),]

        如果只需要基数 R,则:

        bm <- duplicated(d$V1) | duplicated(d$V1,fromLast = TRUE) d[bm,] d[!bm,]

        【讨论】:

        • 它不工作。例如,使用该代码,新数据集将不会同时具有 D 的值。如果我再次 rbind 2 个拆分数据帧,我想要一个能够获得相同原始数据集的代码。
        • 这里的问题是您正在考虑所有列。此外,OP 不希望在唯一集中保留任何重复列的实例。
        • 哦,我明白了。问题的原始版本中没有示例。我会编辑答案
        猜你喜欢
        • 2015-12-02
        • 2017-03-18
        • 2018-10-22
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        相关资源
        最近更新 更多