R/ds_modificar_estructura.R

#' Modifica la estructura de los datos
#'
#' Modifica la estructura de un conjunto de datos de acuerdo a una  
#' estructura dada como entrada
#' @param  archivoDatos      Nombre del archivo con los datos a cambia
#' @param  archivoEstructura Nombre del archivo con la estructura 
#' @return No retorna nada sino que escribe los cambios a un nuevo 
#'         archivo de datos llamado "datos_MODIFICADOS.csv"
#' @import openxlsx
#' @export
ds_modificar_estructura <- function (archivoDatos, archivoEstructura) {
	datos      = read.csv (archivoDatos); 
	if (!file.exists (archivoEstructura)) {
		message ("Precaución: Archivo de estructura modificado no existe!!. No se realiza ningún cambio.")
		return (NA)
	} 
	
	estructura = read.csv (archivoEstructura)
	nFilas     = nrow (estructura)

	cambios = c()
	i = 1
	while (i <= nFilas) {
		textoFila = as.character (estructura [i,2])
		cambios = c (cambios, paste0 (i, ": > ", textoFila))

		i=i+1
		nombreActual = trimws (as.character (estructura [i,1]))
		nombreNuevo  = trimws (as.character (estructura [i,2]))
		cambios = c (cambios, paste0 (i,": >> ", nombreActual," ==> ", nombreNuevo))
		colnames(datos)[colnames (datos)==nombreActual] = nombreNuevo

		if (grepl ("CUALITATIVA", textoFila)) {
	 		patron = "(\\[.*\\][ ])"
			while (grepl ("------------", textoFila)==FALSE){
				i=i+1
				textoFila   = as.character (estructura [i,1])
				valorActual = trimws (strsplit (as.character (estructura[i,1]), patron)[[1]][2])
				valorNuevo  = trimws (strsplit (as.character (estructura[i,2]), patron)[[1]][2])
				cambios = c (cambios, paste0 (i, ": ", valorActual," ==> ", valorNuevo))
				  
				datos [,nombreNuevo] = as.character (datos [,nombreNuevo])
				if (is.na (valorActual))
					next
	  			datos[datos[,nombreNuevo]==valorActual & !is.na (datos [,nombreNuevo]),nombreNuevo] = valorNuevo
			}
		}else if (grepl ("FECHA", textoFila)) {
			valorActual = as.character (datos [1,nombreNuevo])
			datos [,nombreNuevo] = paste0 (datos [,nombreNuevo],"-01-01")
			valorNuevo = as.character (datos [1,nombreNuevo])
			while (grepl ("------------", textoFila)==FALSE){
				i=i+1
				textoFila   = as.character (estructura [i,1])
				cambios = c (cambios, paste0 (i, ": ", valorActual," ==> ", valorNuevo))
			}
		}else if (grepl ("CUANTITATIVA", textoFila)) {
			while (grepl ("------------", textoFila)==FALSE){
				i=i+1
				textoFila   = as.character (estructura [i,1])
			}
		}
		cambios = c (cambios, paste0 ("--------------"))
		i=i+1
	}

	# Se guardan los cambios en un nuevo archivo
	write.csv (datos, "datos_MODIFICADOS.csv", row.names=F)
	write.xlsx (datos, "datos_MODIFICADOS.xlsx", rowNames=F)
	cambiosDF = data.frame (CAMBIOS=cambios)
	write.csv (cambiosDF, "cambios_estructura.csv", row.names=T)
	#cambiosDF = read.csv ("cambios_estructura.csv")
	cat ("\nSe creó el archivo 'cambios_estructura.csv' con los cambios.\n")
	return (cambiosDF)
}
luisgarreta/desistimiento documentation built on May 9, 2022, 12:06 a.m.