# Year and month from a sequence

5 messages
Open this post in threaded view
|

## Year and month from a sequence

 Dear all, I have a panel dataset with a large number of groups (200K+) with a sequence representing the month of the observations (2400 - 4139). The data is from January 1861 to December 2005. My goal is to extract the corresponding month and year for each observation. I tried the following; x\$dt <- seq(from=as.Date("1861-01-01"),by='1 month',length=209000) However, the end date is clearly out of the range. I would like to convert the month number (2400 - 4139) to January 1861 to December 2005 by ID. How can I achieve this? Any help will be highly appreciated. Best, Milu         [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Year and month from a sequence

 Hi Milu, This is similar to the "birthday age" problem as it is much easier to deal with the constant "12 months in a year" rather than the highly variable number of days between two dates: monthno2my<-function(x,startyear=1861,startmonth=2400) {  year<-startyear+(x-startmonth)%/%12  month<-1+(x-startmonth)%%12  return(paste(month.abb[month],year)) } Adjust this to suit what sort of output you want (i.e. numeric, date). Jim On Wed, Jul 15, 2020 at 8:26 AM Miluji Sb <[hidden email]> wrote: > > Dear all, > I have a panel dataset with a large number of groups (200K+) with a > sequence representing the month of the observations (2400 - 4139). The data > is from January 1861 to December 2005. > My goal is to extract the corresponding month and year for each observation. > > I tried the following; > x\$dt <- seq(from=as.Date("1861-01-01"),by='1 month',length=209000) > > However, the end date is clearly out of the range. I would like to convert > the month number (2400 - 4139) to January 1861 to December 2005 by ID. How > can I achieve this? Any help will be highly appreciated. > > Best, > > Milu > >         [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: Year and month from a sequence

 Hi Milu, Jim gave a good solution. Another approach is to use standard packages and objects. In particular 'ts' (time series) objects from the stats package, and 'xts' (extensible time-series) objects from the xts package. library(xts) # construct dummy data z <- rnorm(36) # convert it into a monthly time series starting from January 1861 a <- ts(z,start=c(1861,1),frequency=12) # create an xts object from 'a' b <- as.xts(a) # you can use index(b) to get what you want, e.g. as.Date(index(b)) #  [1] "1861-01-01" "1861-02-01" "1861-03-01" "1861-04-01" "1861-05-01" "1861-06-01" # [7] "1861-07-01" "1861-08-01" "1861-09-01" "1861-10-01" "1861-11-01" "1861-12-01" # [13] "1862-01-01" "1862-02-01" "1862-03-01" "1862-04-01" "1862-05-01" "1862-06-01" # [19] "1862-07-01" "1862-08-01" "1862-09-01" "1862-10-01" "1862-11-01" "1862-12-01" # [25] "1863-01-01" "1863-02-01" "1863-03-01" "1863-04-01" "1863-05-01" "1863-06-01" # [31] "1863-07-01" "1863-08-01" "1863-09-01" "1863-10-01" "1863-11-01" "1863-12-01" HTH, Eric On Wed, Jul 15, 2020 at 1:59 AM Jim Lemon <[hidden email]> wrote: > > Hi Milu, > This is similar to the "birthday age" problem as it is much easier to > deal with the constant "12 months in a year" rather than the highly > variable number of days between two dates: > > monthno2my<-function(x,startyear=1861,startmonth=2400) { >  year<-startyear+(x-startmonth)%/%12 >  month<-1+(x-startmonth)%%12 >  return(paste(month.abb[month],year)) > } > > Adjust this to suit what sort of output you want (i.e. numeric, date). > > Jim > > On Wed, Jul 15, 2020 at 8:26 AM Miluji Sb <[hidden email]> wrote: > > > > Dear all, > > I have a panel dataset with a large number of groups (200K+) with a > > sequence representing the month of the observations (2400 - 4139). The data > > is from January 1861 to December 2005. > > My goal is to extract the corresponding month and year for each observation. > > > > I tried the following; > > x\$dt <- seq(from=as.Date("1861-01-01"),by='1 month',length=209000) > > > > However, the end date is clearly out of the range. I would like to convert > > the month number (2400 - 4139) to January 1861 to December 2005 by ID. How > > can I achieve this? Any help will be highly appreciated. > > > > Best, > > > > Milu > > > >         [[alternative HTML version deleted]] > > > > ______________________________________________ > > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code. ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.