vacio - valores y vectores propios en r
Eliminar los valores de NA de un vector (5)
¿Cómo puedo eliminar los valores de NA de un vector?
Tengo un gran vector que tiene un par de valores de NA
, y estoy tratando de encontrar el valor máximo en ese vector (el vector es todos los números), pero no puedo hacerlo debido a los valores de NA.
¿Cómo puedo eliminar los valores NA para poder calcular el máximo?
En caso de que alguien nuevo en R quiera una respuesta simplificada a la pregunta original
¿Cómo puedo eliminar los valores de NA de un vector?
Aquí está:
Supongamos que tiene un vector foo
siguiente manera:
foo = c(1:10, NA, 20:30)
length(foo)
carrera length(foo)
da 22.
nona_foo = foo[!is.na(foo)]
length(nona_foo)
es 21, porque los valores de NA se han eliminado.
Recuerde is.na(foo)
devuelve una matriz booleana, por lo que indexar foo
con el opuesto de este valor le dará todos los elementos que no son NA.
La función na.omit
es lo que muchas de las rutinas de regresión usan internamente:
vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
Probando ?max
, verás que en realidad tiene un argumento na.rm =
, establecido por defecto en FALSE
. (Ese es el valor predeterminado común para muchas otras funciones R, incluidas sum()
, mean()
, etc.)
Establecer na.rm=TRUE
hace exactamente lo que está pidiendo:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Si quieres eliminar todas las NA
, utiliza este modismo en su lugar:
d <- d[!is.na(d)]
Una nota final: otras funciones (por ejemplo, table()
, lm()
y sort()
) tienen argumentos relacionados con NA
que usan nombres diferentes (y ofrecen diferentes opciones). Entonces, si NA
causa problemas en una llamada a función, vale la pena buscar una solución integrada entre los argumentos de la función. He encontrado que generalmente hay uno ya allí.
Puede llamar a max(vector, na.rm = TRUE)
. De manera más general, puede usar la función na.omit()
.
?max
muestra que hay un parámetro adicional na.rm
que puede establecer en TRUE
.
Aparte de eso, si realmente quieres eliminar las NA
, solo usa algo como:
myvec[!is.na(myvec)]