删除重复项,同时将NA保留在R中

删除重复项,同时将NA保留在R中,r,dataframe,R,Dataframe,我有如下数据: 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 b<-data.frame(ID=c("A","B","C",NA,NA),score=c(1,2,3,5,6),stringsAsFact

我有如下数据:

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
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
b<-a[!duplicated(a$ID),]
library(dplyr)
b<-distinct(a,ID)
print(b)
a使用dplyr:

   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
b%>%group\u by(ID,score)%>%distinct()
#一个tibble:5x2
#分组:ID,得分[5]
ID分数
1 A 1
2 B 2
3 C 3
4       5
5       6

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

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)

a发现了一种非常简单的方法,只需使用base duplicated()函数即可实现这一点

b<-a[!duplicated(a$ID, incomparables = NA),]

b此解决方案的问题是我有其他变量,我不想将其包含在组中。此外,即使这是仅有的两列,
ID
中的多个
也可能具有相同的
分数,我不希望删除这些。@d.b如果这是仅有的两列(数据中有更多)在这种情况下,ID中的多个
具有相同的分数,我不希望删除这些分数。
a[!duplicated(a),]
应该可以工作。复制函数执行以下操作:rest@Onyambu这与上面提到的问题相同。@costebk08仔细看,上面使用的是函数
duplicated(a$ID)
,而不是
duplicated(a)
@onyanbu是的,很遗憾,解决方案不起作用,因为它可以查看
a
中的所有变量。基本上,我在寻找一种说法,即删除重复的obervation,同时忽略一个变量的
NA