Buscar..


Introducción

Cuando no sabemos el valor que toma una variable, decimos que falta su valor, indicado por NA .

Observaciones

Los valores que faltan están representados por el símbolo NA (no disponible). Los valores imposibles (p. Ej., Como resultado de sqrt(-1) ) están representados por el símbolo NaN (no es un número).

Examinando los datos faltantes

anyNA informa si hay algún valor faltante presente; mientras is.na informa valores perdidos elementwise:

vec <- c(1, 2, 3, NA, 5)

anyNA(vec)
# [1] TRUE
is.na(vec)
# [1] FALSE FALSE FALSE  TRUE FALSE

ìs.na devuelve un vector lógico que se obliga a valores enteros en operaciones aritméticas (con FALSE = 0, TRUE = 1). Podemos usar esto para averiguar cuántos valores faltantes hay:

sum(is.na(vec))
# [1] 1

Extendiendo este enfoque, podemos usar colSums y is.na en un marco de datos para contar las NA por columna:

colSums(is.na(airquality))
#   Ozone Solar.R    Wind    Temp   Month     Day 
#      37       7       0       0       0       0 

El paquete naniar (actualmente en github pero no CRAN) ofrece herramientas adicionales para explorar los valores perdidos.

Lectura y escritura de datos con valores de NA.

Al leer conjuntos de datos tabulares con las funciones de read.* , R busca automáticamente los valores faltantes que se parecen a "NA" . Sin embargo, los valores faltantes no siempre están representados por NA . A veces, un punto ( . ), Un guión ( - ) o un valor de carácter (por ejemplo: empty ) indican que un valor es NA . El parámetro na.strings de la función read.* Se puede usar para indicar a R qué símbolos / caracteres deben tratarse como valores de NA :

read.csv("name_of_csv_file.csv", na.strings = "-")

También es posible indicar que más de un símbolo debe leerse como NA :

read.csv('missing.csv', na.strings = c('.','-'))

De manera similar, las NA pueden escribirse con cadenas personalizadas usando el argumento na para write.csv . Otras herramientas para leer y escribir mesas tienen opciones similares.

Usando NAs de diferentes clases.

El símbolo NA es para un valor logical perdido:

class(NA)
#[1] "logical"

Esto es conveniente, ya que puede ser fácilmente coaccionado a otros tipos de vectores atómicos, y por lo tanto, generalmente es el único NA que necesitará:

x <- c(1, NA, 1)
class(x[2])
#[1] "numeric"

Si necesita un solo valor de NA de otro tipo, use NA_character_ , NA_integer_ , NA_real_ o NA_complex_ . Para los valores faltantes de las clases de fantasía, el subconjunto con NA_integer_ suele funcionar; por ejemplo, para obtener una fecha de valor faltante:

class(Sys.Date()[NA_integer_])
# [1] "Date"

VERDADERO / FALSO y / o NA

NA es un tipo lógico y un operador lógico con una NA devolverá NA si el resultado es ambiguo. A continuación, NA OR TRUE evalúa como TRUE porque al menos un lado lo evalúa como TRUE , sin embargo NA OR FALSE devuelve NA porque no sabemos si NA hubiera sido TRUE o FALSE

NA | TRUE
# [1] TRUE  
# TRUE | TRUE is TRUE and FALSE | TRUE is also TRUE.

NA | FALSE
# [1] NA  
# TRUE | FALSE is TRUE but FALSE | FALSE is FALSE.

NA & TRUE
# [1] NA  
# TRUE & TRUE is TRUE but FALSE & TRUE is FALSE.

NA & FALSE
# [1] FALSE
# TRUE & FALSE is FALSE and FALSE & FALSE is also FALSE.

Estas propiedades son útiles si desea subcontratar un conjunto de datos basado en algunas columnas que contienen NA .

df <- data.frame(v1=0:9, 
                 v2=c(rep(1:2, each=4), NA, NA), 
                 v3=c(NA, letters[2:10]))

df[df$v2 == 1 & !is.na(df$v2), ]
#  v1 v2   v3
#1  0  1 <NA>
#2  1  1    b
#3  2  1    c
#4  3  1    d

df[df$v2 == 1, ]
     v1 v2   v3
#1     0  1 <NA>
#2     1  1    b
#3     2  1    c
#4     3  1    d
#NA   NA NA <NA>
#NA.1 NA NA <NA>

Omitir o reemplazar valores perdidos

Recodificación de valores perdidos

Regularmente, los datos faltantes no se codifican como NA en los conjuntos de datos. En SPSS, por ejemplo, los valores que faltan a menudo se representan con el valor 99 .

num.vec <- c(1, 2, 3, 99, 5)
num.vec
## [1]  1  2  3 99  5

Es posible asignar directamente NA usando subconjuntos

num.vec[num.vec == 99] <- NA

Sin embargo, el método preferido es utilizar is.na<- como se muestra a continuación. El archivo de ayuda ( ?is.na ) indica:

is.na<- puede proporcionar una forma más segura de establecer la falta. Se comporta de manera diferente por factores, por ejemplo.

is.na(num.vec) <- num.vec == 99

Ambos metodos regresan

num.vec
## [1]  1  2  3 NA  5

Eliminar valores perdidos

Los valores que faltan se pueden eliminar de varias formas de un vector:

num.vec[!is.na(num.vec)]
num.vec[complete.cases(num.vec)]
na.omit(num.vec)
## [1] 1 2 3 5

Excluyendo los valores faltantes de los cálculos.

Cuando se usan funciones aritméticas en vectores con valores faltantes, se devolverá un valor faltante:

mean(num.vec) # returns: [1] NA

El parámetro na.rm le dice a la función que excluya los valores de NA del cálculo:

mean(num.vec, na.rm = TRUE) # returns: [1] 2.75

# an alternative to using 'na.rm = TRUE':
mean(num.vec[!is.na(num.vec)]) # returns: [1] 2.75

Algunas funciones de R, como lm , tienen un parámetro na.action . El valor predeterminado para esto es na.omit , pero con las options(na.action = 'na.exclude') se puede cambiar el comportamiento predeterminado de R.

Si no es necesario cambiar el comportamiento predeterminado, pero para una situación específica se necesita otra na.action , el parámetro na.action debe incluirse en la llamada a la función, por ejemplo:

 lm(y2 ~ y1, data = anscombe, na.action = 'na.exclude')


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow