#' Función para validar NAs y niveles en tablas de datos
#'
#' @param datos data frame con los datos a validar
#' @param preguntas si este argumento es NA la funcion valida todas las columnas, este argumento toma un vector con las expresiones regulares que le indican que columnas validar por ejemplo c('^plaza','^f1','^edad','NSE',"^N4",'p1$','p2$','p2_1$','^p4_')
#'
#'
#' @return devuelve la tabla con la validación de NAs, el número de niveles y sus etiquetas.
#'
# setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
# devtools::document()
r_validacion<-function(datos,preguntas = NA){
columnas<-names(datos)
datos_unicos<-as.data.frame(matrix("",nrow = nrow(datos), ncol = length(datos)),stringsAsFactors = FALSE) %>% setNames(columnas)
datos_na<-as.data.frame(matrix("",nrow = 1, ncol = length(datos)),stringsAsFactors = FALSE)%>% setNames(columnas)
datos_conteo<-as.data.frame(matrix("",nrow = 1, ncol = length(datos)),stringsAsFactors = FALSE)%>% setNames(columnas)
if(all(is.na(preguntas))){
datos_unicos<-as.data.frame(matrix("",nrow = nrow(datos), ncol = length(datos)),stringsAsFactors = FALSE) %>% setNames(columnas)
datos_na<-as.data.frame(matrix("",nrow = 1, ncol = length(datos)),stringsAsFactors = FALSE)%>% setNames(columnas)
datos_conteo<-as.data.frame(matrix("",nrow = 1, ncol = length(datos)),stringsAsFactors = FALSE)%>% setNames(columnas)
for(columna in columnas){
if(is.numeric(datos[,columna])){
unicos<-unique(datos[,columna])
unicos<-sort(unicos)
}else{
unicos<-unique(as.character(datos[,columna]))
unicos<-sort(unicos)
}
if(length(unicos)>0){
datos_unicos[1:length(unicos),columna]<-unicos
}
datos_na[,columna]<-sum(is.na(datos[,columna])==TRUE)
datos_conteo[,columna]<-length(unicos)
}
resultado<-rbind(datos_na,datos_conteo,datos_unicos)
}else{
datos$id_aux<-1:nrow(datos)
resultado<-data.frame(matrix("",nrow = nrow(datos)+3, ncol = length(preguntas)),stringsAsFactors = FALSE) %>% setNames(preguntas)
for(i in 1:length(preguntas)){
pregunta<-preguntas[i]
datos_melt<- datos %>%
dplyr::select(matches(paste0(pregunta,'|id_aux'))) %>%
reshape2::melt(.,id = c("id_aux"))
variables<-c(as.character(unlist(unique(datos_melt$variable))))
datos_unicos <- datos_melt%>%
distinct(value) %>%
filter(!is.na(value)) %>%
dplyr::arrange(value)
datos_unicos_conteo <- nrow(datos_unicos)
datos_na <- datos_melt %>%
filter(!is.na(value)) %>%
distinct(id_aux)
datos_na <- nrow(datos) - nrow(datos_na)
resultado[1,i]<-paste0(variables,collapse = ", ")
resultado[2,i]<-datos_na
resultado[3,i]<-datos_unicos_conteo
resultado[4:(datos_unicos_conteo+3),i]<-datos_unicos
}
}
return(resultado)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.