Here is how to convert a string to a date in R. A string might contain a date for various reasons. Those reasons change the complexity of the solution. For example, you might have a date as a string after extracting date from a date-time or merging separate date components. Sometimes it might happen by copying data from Excel to R.
Convert string to date in R
If a date in a string in the default R date format is YYYY-MM-DD, you can convert it into the date by using base functionality.
The easiest way is to use function as.Date.
stringdate <- c("2022-07-01", "2022-07-02", "2022-07-03") class(stringdate) #[1] "character" as.Date(stringdate) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
There are various ways to convert string to date by using lubridate functions. In this case, it looks like this.
require(lubridate) ymd(stringdate) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
Parse region-specific string dates in R
If you are copying your data from Excel to R, there might be a date format that is not like YYYY-MM-DD.
In that situation, you should additionally define a format. That helps R to read that correctly. Be aware that there is a difference between capital Y and y in the format specification.
Here is an example of how to parse the U.S. date format.
USdate <- c("07/01/2022", "07/02/2022", "07/03/2022") as.Date(USdate, format = "%m/%d/%Y") #[1] "2022-07-01" "2022-07-02" "2022-07-03" require(lubridate) mdy(USdate) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
Here is an example of how to parse the European date format.
EUdate1 <- c("01/07/2022", "02/07/2022", "03/07/2022") as.Date(EUdate1, format = "%d/%m/%Y") #[1] "2022-07-01" "2022-07-02" "2022-07-03" dmy(EUdate1) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
There might be variations, but as so far, specify the format or use the appropriate lubridate function.
EUdate2 <- c("01.07.2022", "02.07.2022", "03.07.2022") as.Date(EUdate2, format = "%d.%m.%Y") #[1] "2022-07-01" "2022-07-02" "2022-07-03" dmy(EUdate2) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
Convert string with two-digit year to date in R
If you have a two-digit year in the string, then be aware then there is a difference between capital Y and y in the format. If you know the difference, it is no problem to get the correct results.
notfullyear <- c("07/01/22", "07/02/22", "07/03/22") as.Date(notfullyear, format = "%m/%d/%y") #[1] "2022-07-01" "2022-07-02" "2022-07-03" require(lubridate) mdy(notfullyear) #[1] "2022-07-01" "2022-07-02" "2022-07-03"
Convert string to Posix in R
In the previous examples result after parsing dates in R was in the date class.
stringdate <- c("2022-07-01", "2022-07-02", "2022-07-03") class(as.Date(stringdate)) #[1] "Date"
If you want to parse string dates into Posix, here is a result with a specified timezone.
as.POSIXct(stringdate, tz = "UTC") #[1] "2022-07-01 UTC" "2022-07-02 UTC" "2022-07-03 UTC"
Different timezones might cause problems in calculations or merging data.
It is also possible to specify the format.
EUdate1 <- c("01/07/2022", "02/07/2022", "03/07/2022") as.POSIXct(EUdate1, format = "%d/%m/%Y", tz = "UTC") #[1] "2022-07-01 UTC" "2022-07-02 UTC" "2022-07-03 UTC"
Leave a Reply