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/2008
convierte 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.table
y agregar unformat
argumento 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
setAs
para configurarlo como unas
mé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 sesetAs
emita 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
Defaults
paquete para cambiar el formato predeterminado dentro deas.Date.character
Creo 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