我的数据集如下所示:
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
感谢您的时间和善意的考虑...
我的数据集如下所示:
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
感谢您的时间和善意的考虑...
使用 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]
一种使用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
可能有一个稍微整洁的方法来做到这一点:
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))],]
你可以试试这个
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)}))))],]