Valores no disponibles en R

| Última modificación: 8 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Los valores no disponibles en R son valores para los cuales no tenemos ninguna medida en un conjunto de datos de una base de datos. Se representan con un NA.

Pertenecen a valores perdidos que no se han podido recuperar, errores de medida, perdidas de datos, etc.

Detección de valores no disponibles en R

Los valores no disponibles en R los detectamos con is.na(x). Podemos reemplazar su valor con la media, mediana, etc. o, simplemente, eliminarlos con na.omit(x).

Si estamos trabajando con series temporales, es posible que queramos hacer una interpolación de los valores perdidos:

  • zoo::na.approx(x)
In [70] : data <- c (1, 3, NA, 6)
data

1 . 3 . <NA> . 6

is.na (data)

FALSE . FALSE . TRUE . FALSE

In [72] : mouse <- read.csv ("data/Data_Cortex Nuclear.csv")
#mouse data <- mouse [ , c (2:78, 79)]
summary (mouse)
valores no disponibles en r: resultado 1
valores no disponibles en r: resultado 2

Una forma de rellenar estos datos es con, por ejemplo, la media.

Vamos a mirar el número de NA que hay por cada columna:

In [73] : sapply (mouse, function (x) sum (is.na (x)))
valores no disponibles en r: resultado 3

Con el which nos devuelve los valores que están en true:

In [74] : which (is.na (mouse$pMTOR_N))

988 . 989 . 990

In [76] : nrow (mouse)

1080

Inicialmente tenemos 1080 filas.

Para eliminar los NA utilizamos el na.omit. Pero cuidado, porque puede que haya muchos NA que no queramos eliminar, ya que si lo hacemos prácticamente nos quedaríamos sin datos. Debemos usar el na.omit con precaución para eliminar los valores no disponibles en R:

In [75] : mouse_no_na <- na.omit (mouse)
nrow (mouse_no_na)

552

Ahora, después de eliminar los valores no disponibles en R, nos hemos quedado con 552.

In [77] : #Los índices que NO ha eliminado son:
length (na.action (na.omit (mouse)))

528

In [78] : str (na.action (na.omit (mouse)))

‘omit’ Named int [1:528] 1 2 3 4 5 6 7 8 9 10 …
– attr (* , “names”) = chr [1:528] “1” “2” 3″ “4”…

In [79] : nrow (mouse) #número de filas totales
nrow (na.omit (mouse)) #número de filas que hay tras eliminar
nrow (mouse) - nrow (na.omit (mouse)) #número de filas eliminadas

1080

552

528

También podemos observar las filas que hemos eliminado:

na.action (na.omit (mouse))
valores no disponibles en r: resultado 4
In [ ] : head (na.omit (mouse))
valores no disponibles en r: resultado 5

¿Qué hacer con los NA que no se eliminan?

Algunos de estos valores no disponibles en R simplemente se esfuman en ciertos modelos y no tienen ningún tipo de fallo. En cambio, existen modelos en los que sí se presentan fallos debido a los valores no disponibles en R que quedan en el dataset.

Algo que NO debemos hacer nunca es dejar los NA en 0. En vez de eso, podemos reemplazar dichos valores por la media de esa columna.

Vamos a ver tres formas distintas de hacer lo mismo:

In [83] : mouse_data <- mouse [ , 2:77]

In [84] : for (i in 1: ncol (mouse_data)){
mouse_data [ , i] <- replace (mouse_data [ , i] , is.na (mouse_data [ ,i]) , mean (mouse_data [ , i] , na.rm = T))
}

Aquí podríamos reemplazar el elemento que es NA por la media. En caso contrario, dejamos el valor como está.

In [85] : mouse_data = as.data.frame (sapply (mouse_data, function (mcol) replace (mcol, is.na(mcol), mean (mcol, na.rm = TRUE))))

Otra forma es con sapply. En lugar de usar un bucle, como en el ejemplo anterior, usamos el sapply y luego lo transformamos en un data frame. Este modo es ligeramente más rápido.

In [86] : library(zoo)
mouse_data = na.aggregate (mouse_data, FUN = mean)

La última forma de reemplazar valores no disponibles en R (y la más fácil) es con na.aggregate. Esto lo que hace es agregar de la librería zoo todos los que son NA y los reemplazamos por las medias de cada columna.

valores no disponibles en r: resultado 6

Existen muchas otras funciones que se pueden usar para tratar con valores no disponibles en R, como el na.approx. Puedes descubrir qué hace el na.approx y muchísimo más en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, con el cual en unos pocos meses podrás aprender todo lo necesario para empezar en el mundo del Big Data para obtener mejores oportunidades laborales. ¡No esperes para solicitar más información y seguir el camino del éxito!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado