【问题标题】:Remove duplicated rows (based on 2 columns) in R删除 R 中的重复行(基于 2 列)
【发布时间】:2016-12-02 22:59:04
【问题描述】:

我在 R 中有一个如下所示的数据集:

    x1 x2  x3
1:  A Away  2
2:  A Home  2
3:  B Away  2
4:  B Away  1
5:  B Home  2
6:  B Home  1
7:  C Away  1
8:  C Home  1

根据 x1 和 x2 列中的值,我想删除重复的行。我尝试了以下方法:

df[!duplicated(df[,c('x1', 'x2')]),]

它应该删除第 4 行和第 6 行。但不幸的是,它不起作用,因为它返回完全相同的数据,数据集中仍然存在重复的数据。我必须使用什么来删除第 4 行和第 6 行?

【问题讨论】:

标签: r duplicates data.table


【解决方案1】:

我会这样做:

unique(df, by=c("x1", "x2")) # where df is a data.table

如果您只是查看?unique,这将非常明显。

PS:鉴于您 Q 中的语法,我想知道您是否知道 data.table 和 data.frame 语法之间的基本区别。我建议你先阅读vignettes

【讨论】:

    【解决方案2】:
    library("data.table")
    setDT(df)[, .SD[1], by = .(x1, x2)]
    
    #     x1   x2 x3
    # 1:  A Away  2
    # 2:  A Home  2
    # 3:  B Away  2
    # 4:  B Home  2
    # 5:  C Away  1
    # 6:  C Home  1
    

    【讨论】:

      【解决方案3】:

      或者你可以使用dplyr

      library("dplyr")
      df <- data.frame(x1 = c("A","A","B","B","B","B","C","C"), x2 = c("Away","Home","Away","Away","Home","Home","Away","Home"), x3 = c(2,2,2,1,2,1,1,1))
      
      distinct(df,x1,x2,.keep_all = TRUE)
      #      x1   x2 x3
      #    1  A Away  2
      #    2  A Home  2
      #    3  B Away  2
      #    4  B Home  2
      #    5  C Away  1
      #    6  C Home  1
      

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 2016-04-26
        • 2017-05-24
        • 2015-12-17
        • 1970-01-01
        • 2017-02-20
        • 1970-01-01
        • 2019-08-12
        • 2022-01-24
        相关资源
        最近更新 更多