Eliminar NA o valores nulos en R

por | Jun 19, 2018 | R | 11 Comentarios

logo-rSe muestran diferentes formas en R de como eliminar valores nulos, conocidos como NA de un dataframe definido inicialmente.

Cargar datos para ejemplos

id <- c(1,4,3,NA,7,6,9,4,0,8)
texto <- c("a", "b", NA, "NA","a","b","b","b","c","d")
valor <- c(2,8,7,5,1,9,4,3,7,2)
datos <- data.frame(id=id,texto=texto,valor=valor)
head(datos, n=10)
##    id texto valor
## 1   1     a     2
## 2   4     b     8
## 3   3  <NA>     7
## 4  NA    NA     5
## 5   7     a     1
## 6   6     b     9
## 7   9     b     4
## 8   4     b     3
## 9   0     c     7
## 10  8     d     2

 

Contar número de nulos por columna

sapply(datos, function(x) sum(is.na(x)))
##    id texto valor 
##     1     1     0

 

Contar número de nulos por columna (forma 2)

summarise_all(datos, funs(sum(is.na(.))))

 

Eliminar filas con nulos en una columna concreta

datos <- datos[!is.na(datos$id),]
datos <- datos[!is.na(datos$texto),]
head(datos, n= 8)
##    id texto valor
## 1   1     a     2
## 2   4     b     8
## 5   7     a     1
## 6   6     b     9
## 7   9     b     4
## 8   4     b     3
## 9   0     c     7
## 10  8     d     2

 

Eliminar todas las filas que contengan algun valor nulo

delete.na <- function(df, n=0) {
 df[rowSums(is.na(df)) <= n,]
}
delete.na(datos)

 

Eliminar todas las filas que contengan algun valor nulo (forma simple)

datos <- na.omit(datos)

Sígueme en Youtube - canal Análisis de datos

El código fuente lo podeis encontrar en GitHub:

https://github.com/diegocalvobarreno/ejemplos-en-R/blob/master/Eliminar-datos-nulos-en-R.R

11 Comentarios

  1. francisco

    Gracias, muy útil la información.

    Responder
  2. Jasmine

    hola!
    quisera saber cómo hago para quitar la función omit después de haberla usado?

    Responder
  3. rquilez

    Gracias por la info, me ha ayudado mucho!

    Responder
  4. Leandro

    Buena. Les hago una consulta. Resulta que tengo un archivo csv, en una de las columnas llamada genero, hay varios valores nulos o NA, quería eliminar dichos campos vacíos para cargar dicho archivo en un nuevo objeto y poder manipularlo como yo quiera. El tema es que al usar la función na.omit no elimina los nulos sino que los acomoda al final de la columna. Les muestro lo que hice

    # Acá cargo el archivo csv
    archivocsv<-read.csv("data/peliculas.csv")

    # Y en este paso elimino los nulos
    archivocsv2<-na.omit(archivocsv["genero"])

    Donde puede estar el error??

    Responder
  5. wilmar

    creo que debes escribir el nombre de la matriz y no solo la columna.

    Responder
  6. Angel

    tengo una base de datos donde hay registros que en una o mas variables tienen 99 como signo de que es celda vacía. como se hace para que r no lo tenga en cuenta

    Responder
    • OLIVER

      Puedes convertirlos en NA y luego los eliminas con na.omit
      por ejemplo

      nombre_df[nombre_df == 99] <- NA

      Donde halla un 99 se remplazará por NA, tienes que tener cuidado si una columna completa está llena con 99 porque si es así al eliminar los NA, se te eliminarán todas las observaciones.

      Responder
  7. María

    Hola,

    Cómo puedo hacer para eliminar filas que contienen valores vacíos? No son NAs sino que no tienen ningún valor

    Muchas gracias por tu ayuda

    Responder
  8. OLIVER

    Puedes convertirlos en NA y luego los eliminas con na.omit
    por ejemplo

    nombre_df[nombre_df == » «] <- NA

    Donde halla un una celda vacía se remplazará por NA, tienes que tener cuidado si una columna completa está llena con 99 porque si es así al eliminar los NA, se te eliminarán todas las observaciones.

    Responder
  9. OLIVER

    Puedes convertirlos en NA y luego los eliminas con na.omit
    por ejemplo

    nombre_df[nombre_df == 99] <- NA

    Donde halla un 99 se remplazará por NA, tienes que tener cuidado si una columna completa está llena con 99 porque si es así al eliminar los NA, se te eliminarán todas las observaciones.

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada.