An Index Class for Monthly Data
"yearmon" is a class for representing monthly data.
- numeric (interpreted as being
"yearmon" class is used to represent monthly data. Internally it holds
the data as year plus 0 for January, 1/12 for February, 2/12 for March
and so on in order that its internal representation is the same as
ts class with
frequency = 12. If
x is not in this
format it is rounded via
floor(12*x + .0001)/12.
There are coercion methods available for various classes including:
default coercion to
"yearmon" (which coerces to
and coercions to and from
"Date" (see below),
The last one is from the
"fame" package available on CRAN.
In the case of
format argument uses the same
percent code as
"Date". These are described in
"Date" one can specify a year and month with no day.
Default formats of
There is an
is.numeric method which returns
each has an optional
second argument of
"frac" which is a number between 0 and 1 inclusive
that indicates the fraction of the way through the period that the result
represents. The default is 0 which means the beginning of the period.
There is also a
date method for
as.yearmon usable with objects
created with package
Sys.yearmon() returns the current year/month and methods for
range are defined (by defining
a method for
mean method is also defined.
- Returns its argument converted to class
x <- as.yearmon(2000 + seq(0, 23)/12) x as.yearmon("mar07", "%b%y") as.yearmon("2007-03-01") as.yearmon("2007-12") # returned Date is the fraction of the way through # the period given by frac (= 0 by default) as.Date(x) as.Date(x, frac = 1) as.POSIXct(x) # given a Date, x, return the Date of the next Friday nextfri <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1) # 3rd Friday in last month of the quarter of Date x as.Date(as.yearmon(as.yearqtr(x)) + 2/12) + 14 z <- zoo(rnorm(24), x, frequency = 12) z as.ts(z) ## convert data fram to multivariate monthly "ts" series ## 1.read raw data Lines.raw <- "ID Date Count 123 20 May 1999 1 123 21 May 1999 3 222 1 Feb 2000 2 222 3 Feb 2000 4 " DF <- read.table(textConnection(Lines.raw), skip = 1, col.names = c("ID", "d", "b", "Y", "Count")) ## 2. fix raw date DF$yearmon <- as.yearmon(paste(DF$b, DF$Y), "%b %Y") ## 3. aggregate counts over months, convert to zoo and merge over IDs ag <- function(DF) aggregate(zoo(DF$Count), DF$yearmon, sum) z <- do.call("merge.zoo", lapply(split(DF, DF$ID), ag)) ## 4. convert to "zooreg" and then to "ts" frequency(z) <- 12 as.ts(z) xx <- zoo(seq_along(x), x) ## aggregating over year as.year <- function(x) as.numeric(floor(as.yearmon(x))) aggregate(xx, as.year, mean)