R/r_validacion.R

Defines functions r_validacion

Documented in r_validacion

#' 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)
}
pelishk/upax_library documentation built on Nov. 28, 2022, 10:45 a.m.