es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar formato de fecha – Convertir a Clase de Fecha

Tengo una columna de fechas que se leyeron como caracteres. Quiero producir una clase de datos con el formato deseado (por ejemplo, estilo estadounidense, 08/28/2020).
Sin embargo, todas las soluciones para cambiar el formato, producir una clase de caracteres o producir una clase de fecha con formato estándar (2020-08-28), tienen problemas.

Este es un ejemplo reproducible:

df1 <- data.frame(date=c("08/27/2020", "08/28/2020", "08/29/2020"), cases=c(5,6,7))
class(df1$date)

df1$date1<- format(as.Date(df1$date, format = "%m/%d/%Y"), "%m/%d/%Y")
class(df1$date1)

df1$date2<- as.Date(parse_date_time(df1$date,"%m/%d/%Y"))
class(df1$date2)

df1$date3<- as.Date(df1$date, format = "%m/%d/%Y")
class(df$date3)

df1

Como puedes ver, date1 tiene el formato deseado, pero no es de la clase date. Además, date2 y date3 son de la clase Date, pero tienen un formato no deseado.

   date        cases   date1        date3        date2
1| 08/27/2020 | 5    | 08/27/2020  | 2020-08-27 | 2020-08-27|
2| 08/28/2020 | 6    | 08/28/2020  | 2020-08-28 | 2020-08-28|
3| 08/29/2020 | 7    | 08/29/2020  | 2020-08-29 | 2020-08-29|

¿Dónde me estoy equivocando?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás en el camino correcto en términos de usar la función as.Date() para convertir tu columna de caracteres en un objeto de clase fecha. Sin embargo, la razón por la que tu función format() no está produciendo un objeto de clase fecha es porque en realidad está cambiando tu objeto de fecha de regreso a un objeto de caracteres con el formato deseado.

    Para mantener tu objeto de fecha como un objeto de clase fecha y al mismo tiempo cambiar su formato, puedes usar la función format() directamente en la salida de as.Date() de la siguiente manera:

    df1$date <- as.Date(df1$date, format = "%m/%d/%Y")
    df1$date <- format(df1$date, "%m/%d/%Y")
    

    De esta manera, la función as.Date() primero convierte tu columna de caracteres en un objeto de clase fecha, y luego la función format() cambia su formato mientras aún lo mantiene como un objeto de clase fecha.

    Alternativamente, puedes usar el paquete lubridate para lograr el formato de salida deseado y aún así mantener la clase de fecha:

    library(lubridate)
    df1$date <- mdy(df1$date)
    df1$date <- format(df1$date, "%m/%d/%Y")
    

    Aquí, la función mdy() del paquete lubridate convierte fácilmente tu columna de caracteres en un objeto de clase fecha y luego la función format() puede cambiar el formato de la fecha al deseado, mientras que lo mantiene como un objeto de clase fecha.

    Ambos métodos te darán el formato de salida deseado y aún así mantendrán la clase de fecha.

Comments are closed.