Pregunta:
¿Hay alguna forma de especificar el formato de fecha cuando se usa el argumento colClasses en read.table / read.csv?
(Me doy cuenta de que puedo convertir después de la importación, pero con muchas columnas de fecha como esta, sería más fácil hacerlo en el paso de importación)
Ejemplo:
Tengo un .csv con columnas de fecha en el formato %d/%m/%Y.
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
Esto hace que la conversión sea incorrecta. Por ejemplo, se 15/07/2008convierte en 0015-07-20.
Código reproducible:
data <-
structure(list(func_loc = structure(c(1L, 2L, 3L, 3L, 3L, 3L,
3L, 4L, 4L, 5L), .Label = c("3076WAG0003", "3076WAG0004", "3076WAG0007",
"3076WAG0009", "3076WAG0010"), class = "factor"), order_type = structure(c(3L,
3L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 1L), .Label = c("PM01", "PM02",
"PM03"), class = "factor"), actual_finish = structure(c(4L, 6L,
1L, 2L, 3L, 7L, 1L, 8L, 1L, 5L), .Label = c("", "11/03/2008",
"14/08/2008", "15/07/2008", "17/03/2008", "19/01/2009", "22/09/2008",
"6/09/2007"), class = "factor")), .Names = c("func_loc", "order_type",
"actual_finish"), row.names = c(NA, 10L), class = "data.frame")
write.csv(data,"data.csv", row.names = F)
dataImport <- read.csv("data.csv")
str(dataImport)
dataImport
dataImport <- read.csv("data.csv", colClasses = c("factor","factor","Date"))
str(dataImport)
dataImport
Y así es como se ve la salida:

r
date
read.table
read.csv
Tommy O'Dell
fuente
fuente

read.tabley agregar unformatargumento al que se le pasaas.Date. Sin embargo, no me sorprendería que hubiera una forma mejor en la que no estoy pensando.Respuestas:
Puede escribir su propia función que acepte una cadena y la convierta en una Fecha usando el formato que desee, luego use el
setAspara configurarlo como unasmétodo. Entonces puede usar su función como parte de colClasses.Tratar:
Luego modifíquelo si es necesario para trabajar con sus datos.
Editar ---
Es posible que desee ejecutar
setClass('myDate')primero para evitar la advertencia (puede ignorar la advertencia, pero puede resultar molesto si hace esto con frecuencia y esta es una llamada simple que se deshace de ella).fuente
setMethod('myDate')supone que debo hacer? Ejecutarlo solo me da un error ...setClass(arreglado ahora). Lo que hace es evitar que sesetAsemita una advertencia acerca de que 'myDate' no existe como clase. La advertencia es inofensiva y todo sigue funcionando, pero configurar la clase significa que ni siquiera verá la advertencia.Si solo hay 1 formato de fecha que desea cambiar, puede usar el
Defaultspaquete para cambiar el formato predeterminado dentro deas.Date.characterCreo que la respuesta de @Greg Snow es mucho mejor, ya que no cambia el comportamiento predeterminado de una función de uso frecuente.
fuente
En caso de que necesite tiempo también:
fuente
Hace mucho tiempo, mientras tanto, Hadley Wickham resolvió el problema. Así que hoy en día la solución se reduce a un delineador:
Tal vez incluso queramos deshacernos de cosas innecesarias:
fuente