#---------------------------------------------------------------#
## TESTEAR SI NA (NOT AVALAIBLE)                                ##

y <- c(NA,1,NA) # construyendo un vector con NAs
is.na(y) # verifica dónde están las NA en el vector
# esto devuelve: TRUE FALSE TRUE

is.na(c("D","NA",Inf,NaN,0,"",NA)) # ¡aquí solo el último es NA!
## esto devuelve: FALSE FALSE FALSE FALSE FALSE FALSE TRUE ##

anyNA(c(1,2,3)) # devuelve FALSE: no NA aquí

anyNA(c(NA,1,NA)) # devuelve TRUE: hay al menos una NA

#------------------------------------------------- --------------#
## Leer un archivo indicando el tipo de valores desconocidos ##
## estos datos se convertirán en NA ##

Z <- read.csv("f_NA.csv",
              header = TRUE,
              na.string = c("NA","","#DIV/0!"))

head(Z) # imprime las primeras 5 líneas
tail(Z) # imprime las últimas 5 líneas

str(Z) # obtener los primeros valores y clases!
is.na(Z) # una matriz booleana que dice dónde están los NA
is.na(Z[8,]) # línea 8 de la tabla
is.na(Z)[8,3] # ?línea 8, columna 2 de la tabla la feature es NA
is.na(Z$VAR2) # la columna de la función VAR2 de la tabla

as.factor(Z$VAR1) # transforma la función VAR1 en categorías
is.na(Z$VAR1) # esto no pierde NA


#------------------------------------------------- --------------#
## no confunda NA con NaN o I ##
1/0 # división por 0 devuelve Inf (infinito)
1L/0L # división por cero enteros cortos también devuelve Inf
1/Inf # devuelve 0 (¡genial!)
Inf/Inf # devuelve NaN: no es un número
0/0 # devuelve NaN
is.nan(1i) # FALSE: 1i es el número complejo i
es.infinito(1/0) # TRUE
is.infinite(1i/0) # TRUE (bien hecho R!!!)

#------------------------------------------------- --------------#
## creación de nuevas features de conformidad con NA ##

library(caret) # para obtener la función dummyVars

# transformar la función VAR1 en features (es decir, factores)
# tener un nivel (level) por valor entero
Z$VAR1 <- as.factor(Z$VAR1) # "coacciona" un valor numérico en un factor
str(Z) # ver resultado

# creación de una nueva columna de producto de Id*VAR4
t1 <- dummyVars( ~ Id*VAR4 , datos = Z)
new_feature1 <- predict(t1, newdata = Z)
cabeza (new_feature1)

# crear tantas columnas como el producto del número
# de niveles (levels) de categorías (factores) VAR1 y VAR3
t2 <- dummyVars(~VAR1:VAR3, datos=Z)
new_feature2 <- predict(t2, newdata = Z)
cabeza (new_feature2)

## creación del nuevo dataframe resultante
new_Z <- data.frame(new_feature1,
                    new_feature2,
                    Z,
                    fila.names = NULL)

str(new_Z) # ver resultado
#---------------------------------------------------------------#




    