Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert four digit year values to class Date

Tags:

date

r

I've an integer column in my dataset which has four digit year values, like:

 c(2001, 2002, 2002, 2002, 2003, 2005)  

I try to convert the four digit year to class Date using as.Date:

year <- as.Date(as.character(data_file$evtYear), format = "%Y") 

But the output is:

"2001-05-15" "2002-05-15" "2002-05-15" "2002-05-15" "2003-05-15" "2005-05-15" 

This is giving the wrong output. It's giving two year values in one date (both 2001 and also 15).

I just want the convert my four digit year part from the original data to 'Year' as class Date. Expected out put is simply:

2001 2002 2002 2002 2003 2005  

But their class should be of Date type.

How to achieve this in R?

like image 588
LearneR Avatar asked May 15 '15 09:05

LearneR


People also ask

How do I convert number to date Python?

You can use the fromtimestamp function from the datetime module to get a date from a UNIX timestamp. This function takes the timestamp as input and returns the datetime object corresponding to the timestamp.


1 Answers

Based on the comments it turned out that the person asking the question did not need to change a numeric year to "Date" class; nevertheless, the question asked how to do it so here is an answer.

Here are a few ways to create a "Date" class object from a 4 digit numeric year. All use as.Date:

yrs <- c(2001, 2002, 2002, 2002, 2003, 2005) 

1) ISOdate

as.Date(ISOdate(yrs, 1, 1))  # beginning of year as.Date(ISOdate(yrs, 12, 31))  # end of year 

This ISOdate solution is a bit tricky because it creates an intermediate POSIXct object so time zone problems could exist. You might prefer one of the following.

2) paste

as.Date(paste(yrs, 1, 1, sep = "-")) # beginning of year as.Date(paste(yrs, 12, 31, sep = "-")) # end of year 

3) zoo::as.yearmon

library(zoo)  as.Date(as.yearmon(yrs)) # beginning of year as.Date(as.yearmon(yrs) + 11/12, frac = 1) # end of year 

Note: If y is the result for any of the above then format(y, "%Y") gives the character year and as.numeric(format(y, "%Y")) gives the numeric year.

like image 89
G. Grothendieck Avatar answered Oct 08 '22 18:10

G. Grothendieck