【问题标题】:Remove duplicates making sure of NA values R删除重复项以确保 NA 值 R
【发布时间】:2016-12-16 13:02:25
【问题描述】:

我的数据集(df)看起来像,

   ID    Name    Rating    Score  Ranking
   1     abc       3        NA      NA
   1     abc       3        12      13
   2     bcd       4        NA      NA
   2     bcd       4        19      20

我正在尝试删除使用

的重复项
   df <- df[!duplicated(df[1:2]),]

给出,

   ID    Name    Rating    Score  Ranking
   1     abc       3        NA      NA
   2     bcd       4        NA      NA

但我正在努力,

   ID    Name    Rating    Score  Ranking
   1     abc       3        12      13
   2     bcd       4        19      20

如何在同时删除重复项时避免包含 NA 的行,一些帮助会很好,谢谢。

【问题讨论】:

  • 你试过complete.cases()吗?您可以先通过complete.cases() 过滤,然后删除重复项
  • 您也可以使用order。 NA 将移到最后:df &lt;- df[with(df, order(ID, Score, Ranking)),]; df &lt;- df[!duplicated(df[1:2]),]

标签: r duplicates na missing-data


【解决方案1】:

首先,使用na.last = T 将 NA 推送到最后

df<-df[with(df, order(ID, Name, Score, Ranking),na.last = T),]

然后使用fromLast = FALSE 参数删除重复的:

df <- df[!duplicated(df[1:2],fromLast = FALSE),]

【讨论】:

    【解决方案2】:

    使用 dplyr

    df &lt;- df %&gt;% filter(!duplicated(.[,1:2], fromLast = T))

    【讨论】:

      【解决方案3】:

      您可以使用 which() 过滤掉不需要的观察结果,然后使用 unique() 函数:

      a<-unique(c(which(df[,'Score']!="NA"), which(df[,'Ranking']!="NA")))
      
      df2<-unique(df[a,])
      
      > df2
        ID Name Rating Score Ranking
      2  1  abc      3    12      13
      4  2  bcd      4    19      20
      

      【讨论】:

        猜你喜欢
        • 2016-08-23
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 2017-01-17
        • 2018-10-21
        相关资源
        最近更新 更多