2015-08-24

Seleccionar sólo las columnas que contengan NA en R

Title

Problema

De un data frame deseamos seleccionar aquellas columnas que contengan algún valor NA.

i3 <- c(1, 1, 1, 1, 2, 2)
i2 <- c(NA, 1, 1, 1, 2, 2)
i1 <- c(1, NA, 2, 4, 5, 3)
newdat1 <- data.frame(i3, i2, i1)
newdat1
  i3 i2 i1
1  1 NA  1
2  1  1 NA
3  1  1  2
4  1  1  4
5  2  2  5
6  2  2  3

Soluciones

De mayor a menor eficiencia.

  • sapply
  • newdat1[, sapply(newdat1, anyNA), drop = FALSE]
    
      i2 i1
    1 NA  1
    2  1 NA
    3  1  2
    4  1  4
    5  2  5
    6  2  3
    
  • colSums
  • newdat1[,is.na(colSums(newdat1))]
    
  • complete.cases
  • Mi alternativa propuesta. Transponemos el data frame y con complete.cases obtenemos un índice lógico (TRUE, FALSE, FALSE) con las columnas tienen algún NA. Como son aquellas que deseamos con incluir, con el operador ! invertimos el vector lógico anterior (FALSE, TRUE, TRUE) quedándonos con la segunda y tercera columnas.

    newdat1[!complete.cases(t(newdat1))]
    
  • apply
  • apply(newdat1, 2, function(x) sum(is.na(x)) == 0 )
    

    Referencias

    No hay comentarios:

    Publicar un comentario

    Nube de datos