删除重复项,同时将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
。