Fastest way to parse a date-time string to class Date

phil_t picture phil_t · Oct 17, 2017 · Viewed 29.9k times · Source

I have a column with dates as character in the format 10/17/2017 12:00:00 AM. I want parse the string and keep only the date part as class Date, i.e. 2017-10-17. I am using -

df$ReportDate = as.Date(df$ReportDate, format = "%m/%d/%Y %I:%M:%S %p") 
df$ReportDate = as.Date(format(df$ReportDate, "%Y-%m-%d"))

this works, but the dataframe has over 5 million rows so this takes close to two mins.

  user  system elapsed 
104.73    0.55  105.46 

Is there a faster and more efficient way to do this?

Answer

G. Grothendieck picture G. Grothendieck · Oct 17, 2017

Note that as.Date will ignore junk after the date so this takes less than 10 seconds on my not particularly fast laptop:

xx <- rep("10/17/2017 12:00:00 AM", 5000000) # test input
system.time(as.Date(xx, "%m/%d/%Y"))
## user  system elapsed 
## 9.57    0.20    9.82