代码之家  ›  专栏  ›  技术社区  ›  M.Qasim

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

  •  1
  • M.Qasim  · 技术社区  · 13 年前

    我的数据集如下所示:

    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 回复  |  直到 13 年前
        1
  •  4
  •   mnel    13 年前

    使用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]
    
        2
  •  4
  •   Matthew Lundberg    13 年前

    一种使用 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
    
        3
  •  3
  •   alexwhan    13 年前

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

    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))],]
    
        4
  •  0
  •   Aditya Sihag    13 年前

    你可以试试这个

         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)}))))],]