Pregunta

Soy relativamente nuevo en R, pero esta es la primera vez que he tenido que tratar con conversiones de fecha. He leído en mis datos en un archivo CSV (usando read.table ()), pero en cortocircuito los datos para destacar mi problema. Cuando se lee en I, el campo Fecha es el carácter.

Simplemente, la mayoría de las fechas conseguir coaccionado correctamente, a excepción de algunos casos. El siguiente ejemplo se espera que muestre lo que está pasando.

# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1, 
                str_locate(prods.all$Date, " ")[1]-1), 
                "%m/%d/%Y")

# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]

> temp
                   Date      Date2
1925  10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15

Como se puede ver, el año de algunas de las fechas está incorrecto. El patrón parece ocurrir cuando el día es de dos dígitos.

He mirado a través de un par de libros y trató de Google de una manera mejor, pero todo parece sugerir que mis datos no tienen el formato correcto en la entrada.

Teniendo en cuenta lo poderoso que R es, me figura que hay una manera muy fácil de forzar mi columna para ser fechas válidas y que estoy pasando por alto una solución muy obvia.

Cualquier ayuda que puede proporcionar será muy apreciada.

¿Fue útil?

Solución

Se le puede complicar las cosas, ¿hay alguna razón se necesita el paquete stringr?

 df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
 as.Date(df$Date, "%m/%d/%Y %H:%M:%S")

[1] "2009-10-09" "2009-10-15"

De forma más general y si se necesita el componente de tiempo, así, el uso strptime:

strptime(df$Date, "%m/%d/%Y %H:%M:%S")

supongo lo que sus datos reales podrían mirar a partir de los resultados parciales que das.

Otros consejos

La forma más sencilla es utilizar lubridate:

library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)

Esta función devuelve automáticamente los objetos de POSIXct clase y trabajará con cualquiera de los factores o caracteres.

library(lubridate) si el formato de fecha es como esto '04 / 24/2017 05: 35: cambio 00'then se siente más adelante prods.all$Date2<-gsub("/","-",prods.all$Date2)  a continuación, cambiar el formato de fecha parse_date_time(prods.all$Date2, orders="mdy hms")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top