Comprobar valores faltantes mediante un operador booleano en R
- Error al verificar valores existentes y valores faltantes en R
-
Use la función
is.na()para buscar valores faltantes en R - Conclusión
Al analizar datos, podemos importar datos de una fuente externa, como un archivo CSV. Los datos pueden contener valores faltantes marcados como NA.
Si necesitamos verificar diferentes valores en nuestros datos, o si necesitamos verificar NA, primero debemos abordar los valores que faltan para evitar errores. Veremos cómo hacerlo en este artículo.
Crearemos un vector simple para demostrar el problema y la solución.
Código de muestra:
myVec = c(50, 60, NA, 40, 80)
Error al verificar valores existentes y valores faltantes en R
Primero, comprobemos el valor 60, que sabemos que existe en el vector.
Después de eso, buscaremos un valor faltante. Ambos dan el mismo error.
Código de muestra:
# Value 60 exists.
for(i in 1:length(myVec))
if(myVec[i] == 60) {print("Present")}
# A missing value, NA, exists.
for(i in 1:length(myVec))
if(myVec[i] == NA) {print("Missing")}
Producción :
> # Value 60 exists.
> for(i in 1:length(myVec))
+ if(myVec[i] == 60) {print("Present")}
[1] "Present"
Error in if (myVec[i] == 60) { : missing value where TRUE/FALSE needed
> # A missing value, NA, exists.
> for(i in 1:length(myVec))
+ if(myVec[i] == NA) {print("Missing")}
Error in if (myVec[i] == NA) { : missing value where TRUE/FALSE needed
Obtuvimos ese error porque la condición booleana que ingresamos en la declaración if compara un valor con NA o NA con NA. Estas condiciones booleanas evalúan NA en lugar de VERDADERO o FALSO.
Código de muestra:
# This evaluates to NA rather than TRUE.
NA == NA
# This evaluates to NA rather than FALSE.
NA != NA
# Therefore, the following code raises the error:
# "missing value where TRUE/FALSE needed".
if(NA) print("Correct")
Producción :
> # This evaluates to NA rather than TRUE.
> NA == NA
[1] NA
>
> # This evaluates to NA rather than FALSE.
> NA != NA
[1] NA
>
> # Therefore, the following code raises the error:
> # "missing value where TRUE/FALSE needed".
> if(NA) print("Correct")
Error in if (NA) print("Correct") : missing value where TRUE/FALSE needed
Use la función is.na() para buscar valores faltantes en R
Para sortear el problema causado por los valores faltantes, necesitamos identificar los valores faltantes usando la función is.na(). Se pueden manejar utilizando una secuencia de condiciones if y else o condiciones anidadas if y else.
El requisito básico se encuentra a continuación.
- Los valores
NAdeben coincidir por separado de todos los demás valores. - Al verificar otros valores, debemos excluir los valores
NAexplícitamente.
Código de muestra:
# Using a sequence of if and else conditions.
for(i in 1:length(myVec)){
if(!is.na(myVec[i]) & myVec[i] == 60){
print("Match found")} else
if(!is.na(myVec[i]) & myVec[i] != 60){
print("Match not found")} else
if(is.na(myVec[i])) {
print("Found NA")}
}
# Using a nested if.
for(i in 1:length(myVec)){
if(!is.na(myVec[i])){
if(myVec[i]==60){
print("Match Found")} else {
print("Match not found")}
} else {
print("Found NA")}
}
Producción :
> # Using a sequence of if and else conditions.
> for(i in 1:length(myVec)){
+ if(!is.na(myVec[i]) & myVec[i] == 60){
+ print("Match found")} else
+ if(!is.na(myVec[i]) & myVec[i] != 60){
+ print("Match not found")} else
+ if(is.na(myVec[i])) {
+ print("Found NA")}
+ }
[1] "Match not found"
[1] "Match found"
[1] "Found NA"
[1] "Match not found"
[1] "Match not found"
>
> # Using a nested if.
> for(i in 1:length(myVec)){
+ if(!is.na(myVec[i])){
+ if(myVec[i]==60){
+ print("Match Found")} else {
+ print("Match not found")}
+ } else {
+ print("Found NA")}
+ }
[1] "Match not found"
[1] "Match Found"
[1] "Found NA"
[1] "Match not found"
[1] "Match not found"
Conclusión
Siempre que exista la posibilidad de que nuestros datos tengan valores faltantes, debemos escribir un código que separe los valores faltantes de otros valores.
