Saltar al contenido

Cómo reemplazar valores perdidos (NA) en R: na.omit & na.rm.

Los valores perdidos en la ciencia de datos surgen cuando falta una observación en una columna de un marco de datos o cuando hay un valor de carácter en lugar de un valor numérico. Los valores faltantes deben eliminarse o reemplazarse para llegar a una conclusión correcta a partir de los datos.

En este tutorial, aprenderemos cómo lidiar con los valores perdidos con la biblioteca dplyr. La biblioteca dplyr es parte de un ecosistema para el análisis de datos.

En este tutorial, aprenderá

mutar ()

El cuarto verbo de la biblioteca dplyr es útil para crear nuevas variables o cambiar valores de variables existentes.

Procederemos en dos partes. Aprenderemos a:

El verbo mutate () es muy fácil de usar. Podemos crear una nueva variable de acuerdo con esta sintaxis:

mutate(df, name_variable_1 = condition, ...)
arguments:
-df: Data frame used to create a new variable
-name_variable_1: Name and the formula to create the new variable
-...: No limit constraint. Possibility to create more than one variable inside mutate()

Exclusión de valores perdidos (NA)

El método na.omit () de la biblioteca dplyr es una forma sencilla de excluir las observaciones que faltan. Es fácil omitir todas las Naciones Unidas de los datos, pero eso no significa que sea la solución más elegante. Durante el análisis, tiene sentido utilizar diferentes métodos para lidiar con los valores perdidos.

Para abordar el problema de las observaciones faltantes, utilizaremos el conjunto de datos titánico. En este conjunto de datos, tenemos acceso a la información de los pasajeros que estaban a bordo durante la tragedia. Hay muchas Naciones Unidas en este conjunto de datos que deben ser atendidas.

Cargaremos el archivo csv de Internet y luego revisaremos las columnas que tienen NA. Para restaurar las columnas con datos faltantes, podemos usar el siguiente código:

Carguemos los datos y verifiquemos los datos que faltan.


PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"
df_titanic <- read.csv(PATH, sep = ",")
# Return the column names containing missing observations
list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]
list_na

Producción:

## [1] "age"  "fare"

Seo

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

Se proporciona el nombre de las columnas que no contienen datos.

Faltan valores para la edad y la tarifa de las columnas.

Podemos liberarlos con na.omit ().

library(dplyr)
# Exclude the missing observations
df_titanic_drop <-df_titanic %>%
na.omit()		
dim(df_titanic_drop)

Producción:

## [1] 1045   13

El nuevo conjunto de datos contiene 1045 capas en comparación con 1309 con el conjunto de datos original.

Faltan datos para Media y Mediana

Podríamos atribuir los valores perdidos (población) a la mediana o al promedio. Es una buena práctica crear dos variables separadas para la media y la mediana. Una vez creadas, podemos reemplazar las variables recién formadas con los valores faltantes.

Usaremos el método de aplicación para calcular la media de la columna con NA. Veamos un ejemplo

Paso 1) Anteriormente en el tutorial, almacenamos el nombre de las columnas con los valores faltantes en la lista llamada list_na. Usaremos esta lista

Paso 2) Ahora necesitamos calcular la media con el argumento na.rm = TRUE. Este argumento es obligatorio porque a las columnas les faltan datos y esto le dice a R que las ignore.


# Create mean
average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      mean,
      na.rm =  TRUE)
average_missing

Explicación del Código:

Capturamos 4 argumentos en el método de aplicación.

Producción:


##      age     fare 
## 29.88113 33.29548

Logramos crear la media de las columnas donde faltaban observaciones. Ambos valores se utilizarán para reemplazar las observaciones faltantes.

Paso 3) Valores sustitutivos de la ONU

El verbo mutar de la biblioteca dplyr es útil para crear nuevas variables. No necesitamos cambiar la columna original para poder crear una nueva variable sin la UN. mutate es fácil de usar, solo seleccionamos un nombre de variable y definimos cómo crear esta variable. Aquí está el código completo


# Create a new variable with the mean and median
df_titanic_replace <- df_titanic %>%
   mutate(replace_mean_age  = ifelse(is.na(age), average_missing[1], age),
   replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))

Explicación del Código:

Creamos dos variables, replace_mean_age y replace_mean_fare de la siguiente manera:

Si a la edad de la columna le faltan valores, reemplácelo con el primer elemento de la media (edad media), mantenga los valores originales. Misma lógica sobre la tarifa

sum(is.na(df_titanic_replace$age))

Producción:

## [1] 263

Hacer el reemplazo

sum(is.na(df_titanic_replace$replace_mean_age))

Producción:

## [1] 0		

A la edad de la columna original le faltan 263 valores y la variable recién creada ha sido reemplazada por la variable de edad media.

Paso 4) Podemos reemplazar las observaciones que faltan con la mediana.


median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      median,
      na.rm =  TRUE)
df_titanic_replace <- df_titanic %>%
            mutate(replace_median_age  = ifelse(is.na(age), median_missing[1], age), 
            replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))
head(df_titanic_replace)

Producción:

Paso 5) Un conjunto de datos grande puede tener muchos valores perdidos y el método anterior puede ser muy difícil. Podemos ejecutar todos los pasos anteriores en una línea de código usando el método sapply (). Aunque no conoceríamos los valles de los medios y la mediana.

sapply no crea un marco de datos, por lo que podemos plegar la función sapply () dentro de data.frame () para crear un objeto de marco de datos.

# Quick code to replace missing values with the mean
df_titanic_impute_mean < -data.frame(
    sapply(
        df_titanic,
        function(x) ifelse(is.na(x),
            mean(x, na.rm = TRUE),
            x)))
			

Resumen

Tenemos tres métodos para lidiar con los valores perdidos:

La siguiente tabla resume cómo eliminar todas las observaciones faltantes

BibliotecaPropósitoCódigo
bonnEnumere las observaciones que faltan
colnames(df)[apply(df, 2, anyNA)]
dplyrEliminar todos los valores faltantes
na.omit(df)

La entrada con una media o mediana se puede realizar de dos formas

MétodoDetallesVentajasDesventajas
Paso a paso para realizar la solicitudVerifique las columnas con el cálculo de la media, media / mediana, almacene el valor, reemplace mutate ()Conoces el valor de un recurso / medianaMás tiempo de ejecución. Puede ser lento con un gran conjunto de datos
Manera rápida de aplicarUtilice sapply () y data.frame () para buscar y reemplazar automáticamente media / medianaCódigo corto y rápidoNo conozco los valores de entrada