Estandarizacion de formatos de fechas

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.

El primer paso es llamar el dataset con el que se trabajara:

Ejemplo 1

Ejemplo 1

Ejemplo 2

Ejemplo 2

Ejemplo 3

Ejemplo 3

Para llamarlo se utiliza el siguiente codigo:

a_corregir <- read.csv(“Ubicacion del archivo”,header = T) head(a_corregir)

Para realizar una nueva tabla para corregir los formatos se utilizara el siguiente codigo:

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),]

Para identificar las fechas que tengan 5 caracteres se utilizara el siguiente codigo:

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

Fecha con 5 caracteres

Para identificar las fechas que tengan 8 caracteres se utilizara el siguiente codigo:

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

Fecha con 8 caracteres

Para identificar las fechas que tengan 9 caracteres se utilizara el siguiente codigo:

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

Fecha con 9 caracteres

Para lograr que nuestras fechas queden de 10 caracteres, utilizaremos el siguiente codigo:

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

Fecha con 10 caracteres

Por ultimo utilizaremos el siguiente codigo para obtener el archivo con los formatos de fecha estandarizados:

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)

Al finalizar la ejecucion del codigo se obtiene la tabla con los formatos estandarizados a 10 caracteres.