1

我的数据集如下所示:

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

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

4

4 回答 4

4

使用 data.table 的几种方法。

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

library(data.table)
DT <- data.table(DF, key = 'ID')

# self join with the ID values with NA values in score

DT[.(DT[is.na(Score),unique(ID)])]

# or 

DT[,if(any(is.na(Score))) {.SD},by=ID]
于 2013-02-20T02:33:23.970 回答
4

一种使用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
于 2013-02-20T02:41:34.223 回答
3

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

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))],]
于 2013-02-20T02:32:53.907 回答
0

你可以试试这个

     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)}))))],]
于 2013-02-20T03:16:23.960 回答