tecnica - ¿Cuál es la diferencia entre<NA> y NA?
rna sequencing and analysis (2)
Cuando se trata de factors
, cuando NA
está envuelto en corchetes angulares ( <NA>
), eso indica que de hecho es NA.
Cuando es NA
sin corchetes, entonces no es NA, sino un factor apropiado cuya etiqueta es "NA"
# Note a ''real'' NA and a string with the word "NA"
x <- factor(c("hello", NA, "world", "NA"))
x
[1] hello <NA> world NA
Levels: hello NA world <~~ The string appears as a level, the actual NA does not.
as.numeric(x)
[1] 1 NA 3 2 <~~ The string has a numeric value (here, 2, alphabetically)
The NA''s numeric value is just NA
Editar para responder la pregunta de @ Arun:
R
simplemente está tratando de distinguir entre una cadena cuyo valor son las dos letras "NA"
y un valor real que falta, NA
Por lo tanto, la diferencia que ve al mostrar df
frente a df$y
. Ejemplo:
df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)
Tenga en cuenta los dos estilos diferentes de NA:
> df
x y
1 1 a
2 2 <NA>
3 3 c
4 4 NA
Sin embargo, si miramos solo ''df $ y''
[1] "a" NA "c" "NA"
Pero, si eliminamos las comillas (similar a lo que vemos cuando imprimimos un data.frame a la consola):
print(df$y, quote=FALSE)
[1] a <NA> c NA
Y así, una vez más tenemos la distinción de NA
través de los corchetes en ángulo.
Tengo un factor llamado SMOKE con niveles "Y" y "N". Los valores faltantes fueron reemplazados por NA (del nivel inicial "NULL"). Sin embargo, cuando veo el factor, obtengo algo como esto:
head(SMOKE)
N N <NA> Y Y N
Levels: Y N
¿Por qué R muestra NA
como <NA>
? Y hay una diferencia?
Es solo la forma en que R muestra NA
en un factor:
> as.factor(NA)
[1] <NA>
Levels:
>
> f <- factor(c(1:3, NA))
> levels(f)
[1] "1" "2" "3"
> f
[1] 1 2 3 <NA>
Levels: 1 2 3
> is.na(f)
[1] FALSE FALSE FALSE TRUE
Se supone que este es un medio por el cual uno diferenciaría entre NA
y "NA"
en la forma en que se imprime un factor, ya que se imprime sin las comillas, incluso para las etiquetas / niveles de caracteres:
> f2 <- factor(c("NA",NA))
> f2
[1] NA <NA>
Levels: NA
> is.na(f2)
[1] FALSE TRUE