Here is how to join year, month, and day into a date in R if they are stored separately. There are at least two good ways how to combine them in date. In some situations, there might be only a year and month and creating a date for the first day of the month is necessary.
Here is my data set. As you can see, there is a column with year, month, and day numbers. I want to merge those three columns into one date column.
df <- data.frame( yearnum = rep.int(2022, 6), monthnum = 1:6, daynum = c(10, 4, 12, 30, 9, 10) ) df # yearnum monthnum daynum #1 2022 1 10 #2 2022 2 4 #3 2022 3 12 #4 2022 4 30 #5 2022 5 9 #6 2022 6 10
Join year, month, and day with the help of the lubridate package
The easiest way to combine year, month, and day numbers into a date in R, in my opinion, is with the function make_date from the lubridate package.
require(lubridate) make_date(year = df$yearnum, month = df$monthnum, day = df$daynum) #[1] "2022-01-10" "2022-02-04" "2022-03-12" "2022-04-30" "2022-05-09" "2022-06-10"
In this scenario, if you want to gate the first date of each month, replace the day number column with 1.
make_date(year = df$yearnum, month = df$monthnum, day = 1) #[1] "2022-01-01" "2022-02-01" "2022-03-01" "2022-04-01" "2022-05-01" "2022-06-01"
You can use that in a dplyr pipe to merge the year, month, and day column into the date column.
require(dplyr) df %>% mutate('date' = make_date(year = yearnum, month = monthnum, day = daynum)) # yearnum monthnum daynum date #1 2022 1 10 2022-01-10 #2 2022 2 4 2022-02-04 #3 2022 3 12 2022-03-12 #4 2022 4 30 2022-04-30 #5 2022 5 9 2022-05-09 #6 2022 6 10 2022-06-10
It is worth mentioning make_datetime if you want to create a DateTime from separate components.
Join year, month, and day into a date with base R
If you want to use R base functionality to combine year, month, and day components into a date, then try the function ISODate.
ISOdate(year = df$yearnum, month = df$monthnum, day = df$daynum) #[1] "2022-01-10 12:00:00 GMT" "2022-02-04 12:00:00 GMT" "2022-03-12 12:00:00 GMT" #[4] "2022-04-30 12:00:00 GMT" "2022-05-09 12:00:00 GMT" "2022-06-10 12:00:00 GMT"
This function creates an object of classes POSIXct, POSIXlt.
If you like to convert that to date class, then here is how to do that.
as.Date(ISOdate(year = df$yearnum, month = df$monthnum, day = df$daynum)) #[1] "2022-01-10" "2022-02-04" "2022-03-12" "2022-04-30" "2022-05-09" "2022-06-10"
Concatenate year, month, and day in R
Another option is to concatenate date components together and then convert the string to date. Click here to learn more about concatenating in R.
as.Date(paste(df$yearnum, df$monthnum, df$daynum, sep = "-")) #[1] "2022-01-10" "2022-02-04" "2022-03-12" "2022-04-30" "2022-05-09" "2022-06-10"
If you prefer to merge columns with date components into a new data frame column, then here is how to do that.
df$date <- as.Date(paste(df$yearnum, df$monthnum, df$daynum, sep = "-"))
Take a look at how to combine only year and month or do the same with year and quarter.
Leave a Reply