首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中保留NA的同时删除重复项

在R中保留NA的同时删除重复项
EN

Stack Overflow用户
提问于 2018-01-26 01:30:10
回答 3查看 1.5K关注 0票数 2

我有如下所示的数据:

代码语言:javascript
复制
a<-data.frame(ID=c("A","B","C","C",NA,NA),score=c(1,2,3,3,5,6),stringsAsFactors=FALSE)
print(a)
ID score
A     1
B     2
C     3
C     3
<NA>  5
<NA>  6

我尝试在不使用R的情况下删除重复项,将<NA>视为重复项,以获得以下结果:

代码语言:javascript
复制
b<-data.frame(ID=c("A","B","C",NA,NA),score=c(1,2,3,5,6),stringsAsFactors=FALSE)
print(b)
ID score
A     1
B     2
C     3
<NA>  5
<NA>  6

我尝试过以下几种方法:

代码语言:javascript
复制
b<-a[!duplicated(a$ID),]
library(dplyr)
b<-distinct(a,ID)
print(b)

但两者都将<NA>视为重复的ID并删除一个,但我希望保留<NA>的所有实例。有什么想法?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-26 01:56:50

一种直接的方法是将原始数据帧分为两部分,其中ID是NA,而ID不是。执行distinct过滤器,然后将数据帧重新组合在一起:

代码语言:javascript
复制
a<-data.frame(ID=c("A","B","C","C",NA,NA),score=c(1,2,3,3,5,6),stringsAsFactors=FALSE)

aprime<-a[!is.na(a$ID),]
aNA<-a[is.na(a$ID),]

b<-aprime[!duplicated(aprime$ID),]

b<-rbind(b, aNA)

只需做一点工作,就可以将其减少到1-2行代码。

票数 3
EN

Stack Overflow用户

发布于 2018-01-26 01:32:44

使用dplyr:

代码语言:javascript
复制
   b%>%group_by(ID,score)%>%distinct()


# A tibble: 5 x 2
# Groups:   ID, score [5]
     ID score
  <chr> <dbl>
1     A     1
2     B     2
3     C     3
4  <NA>     5
5  <NA>     6
票数 1
EN

Stack Overflow用户

发布于 2020-09-23 21:59:51

找到一种非常简单的方法,只需使用基本的duplicated()函数即可完成此操作。

代码语言:javascript
复制
b<-a[!duplicated(a$ID, incomparables = NA),]

设置incomparables = NA会使R将NA副本读取为FALSE,从而将它们包含在结果数据集中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48448741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档