R 如何查看具有一个或多个NA的重复记录?

R 如何查看具有一个或多个NA的重复记录?,r,duplicate-data,missing-data,R,Duplicate Data,Missing Data,我的数据集如下所示: ID Score A1 60 A1 50 A1 NA B1 30 B1 33 C1 48 C1 39 D1 21 D1 38 D1 NA 我想看看有NA的重复记录。例如: A1 60 A1 50 A1 NA D1 21 D1 38 D1 NA 感谢您的时间和善意的考虑…可能有一个稍微整洁的方法来做到这一点: df <- data.frame(ID=rep(c("A1", "B1", "C1"), each=4), Score=sample(1:100,12)) d

我的数据集如下所示:

ID Score
A1 60
A1 50
A1 NA
B1 30
B1 33
C1 48
C1 39
D1 21
D1 38
D1 NA
我想看看有NA的重复记录。例如:

A1 60
A1 50
A1 NA
D1 21
D1 38
D1 NA

感谢您的时间和善意的考虑…

可能有一个稍微整洁的方法来做到这一点:

df <- data.frame(ID=rep(c("A1", "B1", "C1"), each=4), Score=sample(1:100,12))
df$Score[c(1,7)] <- NA

df[df$ID %in% df$ID[which(is.na(df$Score))],]

可能有一种更简洁的方法:

df <- data.frame(ID=rep(c("A1", "B1", "C1"), each=4), Score=sample(1:100,12))
df$Score[c(1,7)] <- NA

df[df$ID %in% df$ID[which(is.na(df$Score))],]

使用data.table的两种方法

假设您的数据位于名为DF的data.frame中


使用data.table的两种方法

假设您的数据位于名为DF的data.frame中

一种使用ave.Compose的方法:

require(functional)
DF[as.logical(ave(DF$Score, DF$ID, FUN=Compose(is.na, any))),]
##    ID Score
## 1  A1    60
## 2  A1    50
## 3  A1    NA
## 8  D1    21
## 9  D1    38
## 10 D1    NA
一种使用ave.Compose的方法:

require(functional)
DF[as.logical(ave(DF$Score, DF$ID, FUN=Compose(is.na, any))),]
##    ID Score
## 1  A1    60
## 2  A1    50
## 3  A1    NA
## 8  D1    21
## 9  D1    38
## 10 D1    NA
你可以试试这个

     mydata<-data.frame(ID=c(rep("A1",3),rep("B1",2),rep("C1",2),rep("D1",3)),Score=c(60,50,NA,30,33,48,39,21,38,NA))

     mydata[mydata$ID%in%unique(mydata$ID)[-which(is.na(as.vector(tapply(mydata$Score,mydata$ID,FUN=function(x){match(NA,x)}))))],]
你可以试试这个

     mydata<-data.frame(ID=c(rep("A1",3),rep("B1",2),rep("C1",2),rep("D1",3)),Score=c(60,50,NA,30,33,48,39,21,38,NA))

     mydata[mydata$ID%in%unique(mydata$ID)[-which(is.na(as.vector(tapply(mydata$Score,mydata$ID,FUN=function(x){match(NA,x)}))))],]
不需要功能包:DF[as.logicalaveDF$Score,DF$ID,FUN=functionx anyis.nax,]不需要功能包:DF[as.logicalaveDF$Score,DF$ID,FUN=functionx anyis.nax,]