Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
425 views
in Technique[技术] by (71.8m points)

r - Convert four digit year values to class Date

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...