En el trabajo diario en ocasiones tenemos que realizar combinaciones de tablas de diferentes fuentes, lo que ocasiona que el formato utilizado en los datos proporcionados tenga variaciones en la forma de escritura. Un ejemplo de ellos son las fechas, donde si no configuramos la celda como tipo fecha nos puede aparecer el dato de 5 caracteres: 43607, en lugar de 22/05/2019; otra forma de encontrarlo puede ser de 8 caracteres: 1/1/2019; de 9 caracteres: 1/10/2019; o bien, de 10 caracteres: 01/01/2019.
El siguiente codigo propone una manera de estandarizar los formatos de fecha, con la finalidad de mostrar que gracias a Rstudio, se puede optimizar tiempo al ejecutar comandos que realicen el proceso en cuestion de segundos, agilizando la sintesis de la informacion, facilitando su organizacion y manejo.
Ejemplo 1
Ejemplo 2
Ejemplo 3
a_corregir <- read.csv(“Ubicacion del archivo”,header = T) head(a_corregir)
fechas <- data.frame(unique(a_corregir\(Fecha)) fechas\)fecha_modificada <-unique(a_corregir\(Fecha) fechas\)fecha_modificada <- gsub(“-”,“/”,fechas\(fecha_modificada) fechas fechas\)longitud_fecha <- nchar(fechas\(fecha_modificada,type = "chars") #fechas\)intento <- as.Date(fechas\(fecha_modificada) fechas[order(fechas\)longitud_fecha),]
5 caracteres long_5 <- fechas[fechas$longitud_fecha ==5, ] long_5\(fecha_base <- as.Date("1/1/1900","%d/%m/%Y") long_5\)fecha_modificada <- (as.numeric(as.character(long_5\(unique.a_2018.Fecha.)) + long_5\)fecha_base) - 2 long_5 long_5\(unique.a_2018.Fecha. <- long_5\)fecha_modificada long_5 <- long_5[,1:3] long_5\(fecha_modificada <- gsub("-","/",long_5\)fecha_modificada) long_5\(unique.a_2018.Fecha. <- gsub("-","/",long_5\)unique.a_2018.Fecha.) long_5\(longitud_fecha <- nchar(long_5\)fecha_modificada,type = “chars”) long_5\(unique.a_2018.Fecha. <- as.Date(as.character(long_5\)unique.a_2018.Fecha.)) zz <- strsplit(as.character(long_5\(unique.a_2018.Fecha.),"-") zz_separado <- t(as.data.frame(zz)) nueva_union <- paste(zz_separado[,3],zz_separado[,2],zz_separado[,1],sep = "/") long_5\)unique.a_2018.Fecha. <- nueva_union long_5$fecha_modificada <- nueva_union long_5
Fecha con 5 caracteres
8 caracteres long_8 <- fechas[fechas$longitud_fecha ==8, ] zz <- strsplit(as.character(long_8\(unique.a_2018.Fecha.),"/") zz_separado <- t(as.data.frame(zz)) nueva_union <- paste("0",zz_separado[,1],"/0",zz_separado[,2],"/",zz_separado[,3],sep = "") long_8\)unique.a_2018.Fecha. <- nueva_union long_8\(fecha_modificada <- nueva_union long_8\)longitud_fecha <- nchar(long_8$fecha_modificada,type = “chars”) long_8
Fecha con 8 caracteres
9 caracteres long_9 <- fechas[fechas$longitud_fecha ==9, ] zz <- strsplit(as.character(long_9\(unique.a_2018.Fecha.),"/") zz_separado <- as.data.frame(t(as.data.frame(zz))) zz_separado\)longitud_fecha_1 <- nchar(as.character(zz_separado\(V1) ,type = "chars") zz_separado\)longitud_fecha_2 <- nchar(as.character(zz_separado$V2) ,type = “chars”)
if(zz_separado\(longitud_fecha_1==1){ zz_separado\)nueva_union_m1 <- paste(“0”,zz_separado[,1],“/”,zz_separado[,2],“/”,zz_separado[,3],sep = “”) } else { zz_separado$nueva_union_m1 <- paste(zz_separado[,1],“/0”,zz_separado[,2],“/”,zz_separado[,3],sep = “”) }
if(zz_separado\(longitud_fecha_2==1){ zz_separado\)nueva_union_m2 <- paste(“0”,zz_separado[,1],“/”,zz_separado[,2],“/”,zz_separado[,3],sep = “”) } else { zz_separado$nueva_union_m2 <- paste(zz_separado[,1],“/0”,zz_separado[,2],“/”,zz_separado[,3],sep = “”) }
separado_1 <- zz_separado[zz_separado$longitud_fecha_1==2,c(1,2,3,6)] separado_2 <- zz_separado[zz_separado$longitud_fecha_2==2,c(1,2,3,7)] colnames(separado_1)[4] <- “nueva_union” colnames(separado_2)[4] <- “nueva_union” nueva_union <- rbind(separado_1,separado_2) nueva_union <- nueva_union[,4] long_9\(unique.a_2018.Fecha. <- nueva_union long_9\)fecha_modificada <- nueva_union long_9\(longitud_fecha <- nchar(long_9\)fecha_modificada,type = “chars”) long_9
Fecha con 9 caracteres
unir
fechas <- fechas[fechas$longitud_fecha == 10,] #fechas[order(fechas$longitud_fecha),] #colnames(long_5) #colnames(long_8) #colnames(long_9) fechas <- rbind(fechas,long_5) fechas <- rbind(fechas,long_8) fechas <- rbind(fechas,long_9)
Fecha con 10 caracteres
fechas
entender si es dia mes ano o mes dia ano zz <- strsplit(as.character(fechas\(unique.a_2018.Fecha.),"/") zz_separado <- t(as.data.frame(zz)) zz_separado <- as.data.frame(zz_separado) zz_separado\)V1 <- as.numeric(zz_separado\(V1) zz_separado\)V2 <- as.numeric(zz_separado$V2)
zz_separado_correcto <- as.data.frame(zz_separado[zz_separado[,1]>12,]) zz_separado_erroneo <- as.data.frame(zz_separado[zz_separado[,2]>12,])
zz_separado_correcto\(nueva_union <- paste(zz_separado_correcto[,1],"/",zz_separado_correcto[,2],"/",zz_separado_correcto[,3],sep = "") zz_separado_erroneo\)nueva_union <- paste(zz_separado_erroneo[,2],“/”,zz_separado_erroneo[,1],“/”,zz_separado_erroneo[,3],sep = “”)
zz_separado_correcto zz_separado_erroneo
fechas_final <- rbind(zz_separado_correcto,zz_separado_erroneo)