Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R Convert to date from multiple formats

Tags:

r

as.date

I need to convert a string of dates that is in multiple formats to valid dates.

e.g.

dates <- c("01-01-2017","02-01-2017","12-01-2016","20160901","20161001", "20161101")

> as.Date(dates, format=c("%m-%d-%Y","%Y%m%d"))
[1] "2017-01-01" NA           "2016-12-01" "2016-09-01" NA           "2016-11-01"

two dates show as NA

like image 432
user3357059 Avatar asked Dec 23 '22 18:12

user3357059


1 Answers

This is pretty much I wrote the anytime package for:

R> dates <- c("01-01-2017","02-01-2017","12-01-2016","20160901","20161001", 
+             "20161101")
R> library(anytime)
R> anydate(dates)
[1] "2017-01-01" "2017-02-01" "2016-12-01" "2016-09-01" 
[5] "2016-10-01" "2016-11-01"
R> 

Parse any sane input reliably and without explicit format or origin or other line noise.

That being said, not starting ISO style with the year is asking for potential trouble, so 02-03-2017 could be February 3 or March 2. I am following the North American convention I too consider somewhat broken -- but is so darn prevalent. Do yourself a favour and try to limit inputs to ISO dates, at least ISO order YYYYMMDD.

like image 125
Dirk Eddelbuettel Avatar answered Jan 03 '23 05:01

Dirk Eddelbuettel