Jolin
Jolin

Reputation: 241

Convert Date format r programming

converting a string to date

date_string <- c("1st December 2019" , "2nd December 2019" , "3rd December 2019" ,"4th November 2019" 

, "20th November 2019")

date_string_new <- as.Date(date_string, format= "%d %B %Y")

But the output is "1st December 2019" "2nd December 2019" "3rd December 2019"
[4] "4th Novemeber 2019" "20th Novemeber 2019"

[1] NA NA NA NA NA

Ideally is

[1] "1 December 2019"   "2 December 2019"   "3 December 2019"  
[4] "4 Novemeber 2019"  "20 Novemeber 2019

Upvotes: 1

Views: 606

Answers (3)

akrun
akrun

Reputation: 887951

We can just remove the characters after the digits with sub and use as.Date from base R

as.Date(sub("[a-z]+", "", date_string), "%d %B %Y") 
#[1] "2019-12-01" "2019-12-02" "2019-12-03" "2019-11-04" "2019-11-20"

Upvotes: 0

Ronak Shah
Ronak Shah

Reputation: 389325

In base R, you can do

as.Date(sub('(\\d+).*?\\s(.*)', '\\1\\2', date_string), "%d%B%Y")
#[1] "2019-12-01" "2019-12-02" "2019-12-03" "2019-11-04" "2019-11-20"

If you want output in the same format, you can try

sub('(\\d+).*?\\s(.*)', '\\1 \\2', date_string)
#[1] "1 December 2019"  "2 December 2019"  "3 December 2019"  "4 November 2019"  "20 November 2019"

Or

sub('st|nd|rd|th', "", date_string)

Upvotes: 1

Ben
Ben

Reputation: 30539

Perhaps you might consider lubridate package for date conversions:

library(lubridate)

date_string_new <- dmy(date_string)

R> date_string_new
[1] "2019-12-01" "2019-12-02" "2019-12-03" "2019-11-04" "2019-11-20"

This will store the date results as class Date.

Upvotes: 1

Related Questions