Reputation: 241
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
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
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
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