Jormax27
Jormax27

Reputation: 3

R: Using the lubridate as.Dates function to convert YYYYMMDD to dates

Currently I am attempting to convert dates in the YYYYMMDD format to separate columns for year, month, and day. I know that using the as.Date function I can convert YYYYMMDD to YYYY-MM-DD, and work from there, however R is misinterpreting the dates and I'm not sure what to do. The function is converting the values into dates, but not correctly.

For example: R is converting '19030106' to '2019-03-01', when it should be '1903-01-06'. I'm not sure how to fix this, but this is the code I am using.

library(lubridate)

PrecipAll$Date <- as.Date(as.character(PrecipAll$YYYYMMDD), format = "%y%m%d")

YYYYMMDD is currently numeric, and I needed to include as.character in order for it to output a date at all, but if there are better solutions please help.

Additionally, if you have any tips on separating the corrected dates into separate Year, Month, and Date columns that would be greatly appreciated.

Upvotes: 0

Views: 2959

Answers (1)

Nicol&#225;s Velasquez
Nicol&#225;s Velasquez

Reputation: 5898

With {lubridate}, try ymd() to parse the YYYYMMDD varaible, regradless if it is in numeric or character form. Also use {lubridate}'s year, month, and day functions to get those variables as numeric signals.

library(lubridate)

PrecipAll <- data.frame(YYYYMMDD = c(19030106, 19100207, 20001130))

mutate(.data = PrecipAll, 
       date = lubridate::ymd(YYYYMMDD), 
       year = year(date), 
       month_n = month(date), 
       day_n = day(date))

  YYYYMMDD       date year month_n day_n
1 19030106 1903-01-06 1903       1     6
2 19100207 1910-02-07 1910       2     7
3 20001130 2000-11-30 2000      11    30

Upvotes: 5

Related Questions