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?
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With