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?
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ónformat()
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 deas.Date()
de la siguiente manera:De esta manera, la función
as.Date()
primero convierte tu columna de caracteres en un objeto de clase fecha, y luego la funciónformat()
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:Aquí, la función
mdy()
del paquetelubridate
convierte fácilmente tu columna de caracteres en un objeto de clase fecha y luego la funciónformat()
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.