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

を使ったアプローチaveCompose楽しみのために投げ込まれた:

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 に答える