quimica not logical r logical-operators

not - rstudio logical operators



R: Tratar con TRUE, FALSE, NA y NaN (5)

Aqui hay un vector

a = c(T,F,F,NA,F,T,NA,F,T)

Me gustaría una función simple que devuelva VERDADERO cada vez que haya un VERDADERO en a y Falso cada vez que haya una Falso o una NA en a .

Las 3 cosas siguientes no funcionan.

a == T identical(T,a) isTRUE(a)

Aquí hay una solución.

a[-which(is.na(a))]

Pero no parece ser una solución directa y sencilla.

¿Hay otra solución?

Aquí hay algunas funciones (y operadores) que conozco:

identical() isTRUE() is.na() na.rm() & | !

¿Cuáles son las otras funciones (operadores, consejos, lo que sea, ...) que son útiles para tratar con TRUE, FALSE, NA, NaN?

y finalmente...

¿Cuáles son las diferencias entre NA y NaN?

¿Hay otras "cosas lógicas" que T, F, NA y NaN?

Muchas gracias !


Así que quieres que TRUE permanezca VERDADERO y FALSO para que permanezca FALSO, el único cambio real es que NA debe convertirse en FALSO, así que haz este cambio como:

a[ is.na(a) ] <- FALSE

O puede reformular para decir que es VERDADERO si es VERDADERO y no falta:

a <- a & !is.na(a)


Me gusta la función is.element:

is.element(a, T)


No es necesario envolver nada en una función: los siguientes trabajos

a = c(T,F,NA) a %in% TRUE [1] TRUE FALSE FALSE


Para responder a sus preguntas en orden:

1) El operador == no trata las NA como usted esperaría. Una función muy útil es esta función r-cookbook.com de r-cookbook.com :

compareNA <- function(v1,v2) { # This function returns TRUE wherever elements are the same, including NA''s, # and false everywhere else. same <- (v1 == v2) | (is.na(v1) & is.na(v2)) same[is.na(same)] <- FALSE return(same) }

2) NA significa "No disponible" y no es lo mismo que el NaN general ("no es un número"). NA se usa generalmente para un valor predeterminado para que un número represente los datos faltantes; Los NaN normalmente se generan debido a un problema numérico (registro de -1 o similar).

3) No estoy realmente seguro de lo que quiere decir con "cosas lógicas": muchos tipos de datos diferentes, incluidos los vectores numéricos, se pueden usar como entrada para operadores lógicos. Puede intentar leer la página de operadores lógicos R: http://stat.ethz.ch/R-manual/R-patched/library/base/html/Logic.html .

¡Espero que esto ayude!


Si tomas la sugerencia de Ben Bolker arriba, puedes configurar tu propia función siguiendo la sintaxis de is.na ()

is.true <- function(x) { !is.na(x) & x } a = c(T,F,F,NA,F,T,NA,F,T) is.true(a) [1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE

Esto también funciona para la subcontratación de datos.

b = c(1:9) df <- as.data.frame(cbind(a,b)) df[is.true(df$a),] a b 1 1 1 6 1 6 9 1 9

Y ayuda a evitar la incorporación accidental de filas vacías donde NA existe en los datos.

df[df$a == TRUE,] a b 1 1 1 NA NA NA 6 1 6 NA.1 NA NA 9 1 9