Changes in Version 1.8-16

  * When coercing `timeSeries` objects to `zoo` it has long not been necessary
    to employ `timeSeries::time()` but instead the base `stats::time()` generic
    can be used (reported by Georgi Boshnakov).


Changes in Version 1.8-15

  * Documentation fix in BibTeX files requested by CRAN: Use `doi` field rather
    than `url` for DOIs, and updates to various URLs.


Changes in Version 1.8-14

  * In the `scale_x_yearmon()` function the `scale_x_continuous()` function
    is now called with `transform' argument rather than the old `trans` argument
    (deprecated since `ggplot2` 3.5.0). The analogous changes are made for
    `scale_y_*` and `yearqtr`. (Patch provided by Jari Karppinen.)

  * Improve example with AM/PM times in `vignette("zoo-read", package = "zoo")`:
    The `%p` specification for the AM/PM indicator should be combined with `%I`
    (and not `%H`) for the hours in 01-12 (rather than 00-23). (Reported by
    Brian D. Ripley.)
    
  * In the C code use the `isS4()` API rather than `IS_S4_OBJECT()`.

  * In `vignette("zoo-quickref", package = "zoo")` update the Yahoo! Finance
    example (using the MSFT symbol instead of the discontinued SUNW symbol)
    and omit the Oanda example (because the Oanda service has been discontinued).
    (Reported by Robert Woodman.)


Changes in Version 1.8-13

  * New tinyplot() method for "zoo" objects that is similar to the autoplot()
    method but employs the tinyplot package rather than ggplot2 for drawing.

  * In "yearmon" and "yearqtr" try harder to assure that the underlying vector
    type remains numeric (without getting coerced). Also added nicer handling
    and printing of zero-length yearmon/yearqtr vectors and added a [<- method
    for "yearmon" and "yearqtr" objects and (suggested by Kyle F. Butts).

  * The diff() method for "zoo" objects gained the argument log = FALSE so that
    diff(x, log = TRUE) can also be used instead of diff(log(x)).

  * The as.vector() method for "zoo" objects now applies to coredata() directly
    rather than going through as.matrix(). The latter was used in previous
    versions setting up unnecessary additional row/column names etc. with
    unnecessary computational overhead. (Reported by Ethan Smith at
    https://github.com/joshuaulrich/xts/issues/406)

  * In write.zoo(), by default, the index() is formatted using format() rather
    than as.character() now (reported in https://stackoverflow.com/questions/77553026).
    Alternatively, the function FUN to format the time index can also be specified
    by the user.

  * The zoo documentation had aliases for head.ts and tail.ts, although these
    methods were only very briefly part of the zoo development version and never
    released. The aliases have been removed now and the base stats package
    will actually provide head.ts() and tail.ts() starting from R 4.5.0.


Changes in Version 1.8-12

  * The autoplot() method for "zoo" objects now uses ggplot() directly rather
    than the qplot() function which has been deprecated in recent versions of
    ggplot2.

  * Support start = NA and end = NA in addition to start = NULL and end = NULL
    for unspecified start and end time of a window() of a zoo series.

  * Remove unnecessary S3 method declarations for axis.yearmon/yearqtr as
    axis() is no S3 generic, only Axis() is (reported by Kurt Hornik).

  * The helper function index2char() now calls format() instead of as.character()
    for objects inheriting from class POSIXt.


Changes in Version 1.8-11

  * The as.ts() methods for both "zoo" and "zooreg" objects now allow to pass on
    the fill argument (through ...) to the underlying merge() call. Thus, you can
    say as.ts(z, fill = 0) to fill potential gaps with 0s instead of NAs.

  * The na.spline() method for "ts" objects had been provided internally in the
    package but has only been correctly registered in the NAMESPACE now.

  * The merge() method gained a sep = "." argument to optionally use a different
    separator character when making pasting suffixes to column names for making
    them unique (suggested by Joshua Ulrich).

  * The MATCH() methods for Date/POSIXct/POSIXlt object now coerce the "table"
    argument (if necessary) to Date or POSIXct, respectively, before calling
    match(unclass(x), unclass(table), ...) internally.

  * In case of a Date/POSIXct/POSIXlt "table" and a plain atomic argument "x",
    the default MATCH() method coerces "x" to Date or POSIXct, respectively,
    before calling match(unclass(x), unclass(table), ...) internally.

  * As the "fts" package has been archived on CRAN for several months, it has been
    excluded from the Suggests of the package. The as.zoo() method for "fts"
    objects continues to be part of the package, though, just the hyperlinks in
    the documentation have been removed.


Changes in Version 1.8-10

  * The transform() method now internally uses a list of zoo series (as opposed
    to a data.frame of numeric variables, as used in previous versions). This
    means that the transformations can really operate on full zoo series.

  * Added MATCH() methods for classes "Date", "POSIXct", and "POSIXlt", all
    of which essentially match the underlying numeric vector (suggested by
    Kurt Hornik).

  * In zooreg() the "ts.eps" argument is now also used (in squares) as the
    tolerance in the all.equal() comparisons used to determine the underlying
    regular time grid.


Changes in Version 1.8-9

  * Added a basic boxplot(x, ...) method for zoo objects that simply calls
    boxplot(coredata(x), ...).

  * Bug fix in [.zoo and [<-.zoo where indexing with matrices did not
    work correctly anymore in R 4.x.y because "matrix" objects now additionally
    inherit from "array" objects. (Reported by Bill Cunliffe.)

  * Improved internal functionality in na.spline.default() in the same way
    na.approx.default() was enhanced in zoo 1.7-14 and 1.7-13. One difference
    is that while na.approx() requires at least two non-NA observations,
    na.spline() just needs one non-NA observation (using a constant to
    interpolate in that case).

  * If the FUN in rollapply() returns a matrix or data.frame with more than
    one row per element/time point, then this is flattened now so that the
    result is again a matrix with one row per element/time point.

  * merge.zoo() now handles the case of all indexes being integer or numeric
    by coercing the integer indexes to numeric (reported by Simone Giannerini).

  * zooreg(x) now allows to create an integer index if start (and end, if any)
    are integer and the implied deltat is not numerically different from an
    integer value.


Changes in Version 1.8-8

  * diff.zoo(x, arithmetic = FALSE) now also works if x contains negative
    data.

  * merge.zoo() now handles the combination of Date and numeric indexes
    explicitly to work around the new behavior of c.Date() in R >= 4.1.0.


Changes in Version 1.8-7

  * Added scale_type() methods for yearmon/yearqtr to facilitate ggplot2
    visualizations of zoo series with yearmon/yearqtr time index (suggested
    by Brian Diggs). This requires at least ggplot2 3.0.0.
    
  * In merge.zoo() "character" columns are now processed in the same way
    as "logical" columns.
    
  * Replaced the "fruitohms" example in the "zoo" vignette because the
    corresponding "DAAG" package is not actively maintained on CRAN anymore.
    Instead the "Journals" data from the "AER" package is used.


Changes in Version 1.8-6

  * Adding a zero-width zoo series via $<- to an existing zoo series
    erroneously changed the last column name. This has been fixed now.
    (Prompted by https://github.com/joshuaulrich/xts/issues/45)

  * Set random seed (along with suppressWarnings(RNGversion("3.5.0"))) in all
    manual pages that use rnorm() as well. Regenerated reference output
    of examples.


Changes in Version 1.8-5

  * Added dedicated diff() methods for "yearmon" and "yearqtr" objects.

  * Fix potential problems when logic comparisons in if() are not of
    length 1 (reported by Kurt Hornik).

  * Fix potential protect calls found by rchk. ScalarInteger() and
    MAKE_CLASS() potentially allocate (reported and patched by Kurt Hornik).

  * Set useDynamicSymbols to FALSE as it is better practice to not allow
    the DLL to be searched for entry points via strings (suggested by Kurt
    Hornik).

  * Replace as.zoo.xts() with xts:::as.zoo.xts(). Both zoo and xts register
    an as.zoo.xts() method with the xts version being slightly better. Hence
    the zoo version was replaced with the xts version as the package that owns
    the class should define the conversion method.

  * read.zoo(x) did not process columns correctly who had column names
    that are intergers in 1:ncol(x).

  * Add example on ?ggplot2.zoo that illustrates how to use scale_x_yearmon
    for a discrete labeling (rather than continuous). Adapted from:
    https://stackoverflow.com/questions/54591625/missing-yearmon-labels-using-ggplot-scale-x-yearmon/54592173#54592173

  * Added suppressWarnings(RNGversion("3.5.0")) in all vignettes and manual
    pages that use set.seed() to make computations reproducible. This is
    necessitated by recent (> 3.5.0) improvements in R's default RNG to
    yield the same output in all CRAN checks.

  * Added maxgap=Inf argument to na.trim(). In particular na.approx() and
    na.spline() now pass on maxgap=maxgap to na.trim() so that leading/trailing
    NAs are handled consistently with inner NAs (pointed out by Ken Williams).


Changes in Version 1.8-4

  * Conditional registration of S3 methods simplified in R-devel (aka
    3.6.0-to-be) which is leveraged in "zoo" for the autoplot() and
    fortify() methods if "ggplot2" is loaded.


Changes in Version 1.8-3

  * The 'width' argument in rollapply() is now trunc()-ated to an integer
    rather than implicitly coercing it (which lead to inconsistent and/or
    unintended behavior for non-integer widths in previous versions).
    Analogously for argument "k" in the other roll*() functions.

  * Consistently use read.zoo(text = ...) and read.table(text = ...)
    instead of read.zoo(textConnection(...)) and read.table(textConnection(...))
    in order to cleanly open/close the text connection.


Changes in Version 1.8-2

  * Properly register autoplot() and fortify() methods for "zoo" objects
    provided that "ggplot2" is loaded.

  * If rollapply(), rollmean(), etc. are applied to zero-length objects,
    these objects are returned unmodified.

  * The rollmean(x, k, ...) method now calls rollapply(x, k, (mean), ...) in
    case x contains any NAs (as the fast cumsum-based solution in rollmean is
    not applicable in this case). Analogously for rollsum() and rollmedian().
    (Reported by Jan Gorecki.)

  * Added new na.fill0() function for simpler filling of NAs in sufficiently
    plain vectors, Date objects, etc.

  * Applying na.fill() to all-NA vectors/columns now consistently treats
    all NAs as leading NAs. Also filling character vectors/columns has been
    improved.

  * In write.zoo() the time index column is now coerced to as.character()
    prior to calling write.table() so that quote=TRUE is applied when writing
    time indexes with spaces (e.g., "Jan 2000" for "yearmon").


Changes in Version 1.8-1

  * New .DollarNames method (contributed by Josh Ulrich) to enable tab
    completion when using zoo_object$...

  * New default method for zoo::as.Date() that simply dispatches to
    base::as.Date().

  * rollapply(x, k, FUN, align = "right") lead to an error if length(x) < k.
    This has been corrected to match the behavior of the other align types.

  * rollmean(), rollsum(), rollmedian(), and rollmax() no longer throw an
    error if the series is shorter than the window size. Instead rollapply()
    is called which either returns an empty series (if "fill" is not specified)
    or a padded series (if "fill" is specified, e.g., to NA).

  * read.zoo() now also handles "tbl" objects by coercing them to proper
    "data.frame"s first. Also gained a read = read.table argument to simplify
    convenience interfaces read.csv.zoo() etc.

  * The fortify() method gained a "names" argument so that the column names
    of the (melted) series can be modified.


Changes in Version 1.8-0

  * zoo() and zooreg() gained a calendar = getOption("zoo.calendar", TRUE)
    argument so that, by default, yearqtr and yearmon are used as the time
    index for regular zoo series with frequency 4 and 12, respectively. With
    calendar = FALSE the behavior from previous versions with plain
    unclassed time indexes can be obtained. Set options(zoo.calendar = FALSE)
    to always retain the old behavior.

  * na.locf() is made faster by using a diff()-based solution rather than
    cumsum() (suggested by Ruben Arslan). Also, the workhorse function
    na.locf0() underlying the default na.locf() method is now exported
    in the user interface as it is faster (but also supports less options).

  * Better support of vector-valued 'split' arguments in read.zoo().

  * Special-cased rollmax(..., k = 1) to return the input coredata().
  
  * as.character() for "yearqtr" objects did not process NA elements correctly.


Changes in Version 1.7-14

  * Several convenience interfaces to read.zoo() have been added:
    read.table.zoo(), read.csv.zoo(), read.csv2.zoo(), read.delim.zoo(),
    read.delim2.zoo(). All of these first call the corresponding read.*()
    function to read the data from a text file (with the respective default
    settings) and subsequently call read.zoo() to turn the data into
    a zoo series.

  * na.approx.default() did not properly process the "maxgap" argument
    if y did not contain any NAs but NAs were only created implicitly
    by xout being different from x (pointed out by Stefan Metzger).
    A suitable fix has been added that merges x and xout first.

  * aggregate.zoo() and rollapply.zoo() gained the argument coredata=TRUE
    which can control whether only the coredata is passed to each subset
    (previous behavior) or the full zoo series.

  * The "its" package has been archived on CRAN and hence removed from
    the list of zoo's suggested packages. However, various methods for
    objects of class "its" continue to be available in zoo in case someone
    still uses the legacy code.


Changes in Version 1.7-13

  * The window() method erroneously dropped the dimension in case of
    1-column zoo series. Fixed now.

  * Bug fix in NA handling of rollmax() pointed out by Cory Fletcher.
    
  * A few as.yearmon/as.yearqtr methods were not registered in
    the NAMESPACE but are now.
    
  * If there are less then two non-NAs in na.approx() then approx()
    cannot be applied. Instead of throwing an error (as up to version
    1.7-12) simply no NAs are replaced now.

  * Bug fix for lag(z, k = k, na.pad = TRUE) which ignored na.pad = TRUE
    if 'k' was a vector of lags.


Changes in Version 1.7-12

  * read.zoo() with a data.frame argument now defaults to FUN = identity
    if the index.column is not character or factor.  See ?read.zoo for
    additional details.

  * read.zoo() heuristic improved so that POSIXct rather than Date is
    detected in cases like: read.zoo(text = "2010-01-01 12:05:03 88.1",
    index = 1:2).
    
  * Added a dim<- method that checks whether the new dimension value
    appears to be ok and then calls the default.

  * The index<- and time<- methods now enforce that the new time index
    is actually correctly ordered (suggested by Joshua Ulrich).
    
  * The fortify() method now has a col.names argument that allows to set
    (some of) the column names of the resulting data.frame.

  * Various small bug fixes and enhancements.


Changes in Version 1.7-11

  * Extended the license from "GPL-2" to "GPL-2 | GPL-3".

  * Avoid duplications in Suggests/Imports/Depends in the package's
    DESCRIPTION. Use only :: instead of ::: to access certain functions
    from other namespaces.

  * Added as.list() methods for yearmon/yearqtr.
  
  * Added workaround in Ops.zoo if first argument is not a zoo series
    (prompted by Josh Ulrich).

  * The transform() method for zoo series now does what method for
    data.frame does (instead of just calling it) in order to get
    non-standard evaluation.


Changes in Version 1.7-10

  * All methods that had previously been fully exported (merge.zoo,
    MATCH.default, ..., and many more) in order to be accessible to
    _all_ conceivable generics are now additionally registered as
    S3method()s for the standard generics. Exception: as.Date.* are
    still only fully exported.

  * Added a new mean() method for "zoo" objects that simply does
    mean(coredata(obj), ...).

  * Added yearmon_trans, scale_x_yearmon and scale_y_yearmon and
    yearqtr_trans, scale_x_yearqtr and scale_y_yearqtr to ggplot2 interface.

  * Removed the use of the shape and linetype aesthetic by default
    in autoplot() method.

  * Bug fix in na.fill for univariate series based on 1-column matrices
    (provided by Josh Ulrich).

  * Added [[ methods for "yearmon" and "yearqtr".

  * Constructs like time(obj)[ORDER(time(obj))] are now split up into
    two steps in the package code. If zoo is only imported but not
    loaded, R can otherwise have problems correctly dispatching to
    the new generics ORDER and MATCH.
    
  * as.Date() now also works for yearqtr/yearmon that are all NA
    (especially needed for format() and print() method).


Changes in Version 1.7-9

  * Added ggplot2 interface through autplot() and fortify() methods.  Also
    support function facet_free().


Changes in Version 1.7-8

  * Added rollsum.

  * Bugfix in src/lag.c for the case of k > NROW.


Changes in Version 1.7-7

  * Fixed bug where colnames were dropped when merging with zero width
    zoo object.

  * Fixed slow-down in rollapply() compared to versions up to 1.6-x.

  * C code now correctly declares GPL-2 (or later) license in the
    src/*.c files.


Changes in Version 1.7-6

  * Removed dependency on fCalendar which was only for historical purposes.
    vignette("zoo", package = "zoo") outlines how timeDate instead of
    fCalendar can be used together with zoo.


Changes in Version 1.7-5

  * fixed a bug in the aggregate() method which occured when using
    it with "zoo" objects that have a "timeDate" index.

  * in read.zoo index.column can refer to column names or numbers (previously
    only numbers)

  * fully export all as.Date.* methods so that they can be used more
    easily (i.e., without extra registration) with as.Date() generics from
    other packages (base in particular).


Changes in Version 1.7-4

  * fixed bug in rollapply() and slowness in rollmax()

  * read.zoo() gains text= argument similar to that in new read.table()


Changes in Version 1.7-3

  * Added drop=TRUE argument to merge() method. When set to drop=FALSE
    this allows to merge a zero-column series with a zoo vector to a
    one-column matrix. The latter is the default in the cbind() method.
    
  * Enhanced the $<- method so that z$a <- value works even if z is a
    zoo series without data.

  * Bug fix in C-version of lag function for xts.


Changes in Version 1.7-2

  * modified as.Date.numeric() is now in the zoo namespace rather than in
    the base namespace, own as.Date() generic to assure dispatch.
    For packages depending on zoo, this means that they may need to import
    if from zoo (or call zoo:::as.Date.numeric directly).

  * small bug fixes


Changes in Version 1.7-1

  * internal change to roll* routines to increase compatibility with classes
    built on top of "zoo" (especially "xts").  This has no effect on "zoo".

  * as.Date.numeric(x, origin = "0000-00-00") is now also accepted being
    equivalent to origin = as.Date("0000-01-01") - 1. (for MATLAB dates)


Changes in Version 1.7-0

  * A [<- method was added and the behaviour is now consistent with the
    [ method.

  * check.names argument of merge() method now defaults to FALSE.

  * Added a new as.zoo() method for "matrix" objects in order to preserve
    column names. Also, a new "data.frame" method leverages the "matrix"
    method.

  * In rollapply() width may be a list whose components are offsets. ascending
    argument is no longer supported. Use width's list form instead.

  * In rollapply() new partial and fill arguments. na.pad argument is deprecated.

  * rollapply() with FUN = mean will no longer call rollmean if the data has
    any NA values
  
  * added yax.flip argument to plot() method for "zoo" objects to be consistent
    with the "ts" method.

  * New vignette("zoo-read") introducing read.zoo() including several new
    features (see also below).

  * in read.zoo() if FUN is not specified but FUN2 is specified then FUN2
    is applied in place of FUN. Previously FUN2 was ignored in this case.
    Also format and tz arguments can be NULL in which case they are treated
    as missing.

  * read.zoo() can accept a vector of filenames in which case each is read in
    and a single zoo object is returned formed by merging the individual ones.

  * if FUN is omitted in read.zoo() and index.column specifies multiple columns
    then the columns are pasted together separated by spaces and processing
    continues as if there were one column.

  * in read.zoo() index.column = 0 is now valid in which case 1, 2, 3, ... is
    used for index

  * read.zoo() can now read in a zoo object with an index but no data

  * in most situations in which a plain numeric vector for index.column in
    read.zoo() would give an error it now also tries using 
    as.list(index.column). As a result its almost always possible to use a 
    plain numeric index.column rather than a list.

  * a new src/ directory containing C code backported from the xts package is now
    included. This is the start of the process to align some of the faster C
    internals of xts with zoo.  xts is now using the LinkingTo option to
    call certain code in the zoo package (previously in xts/src). Subsequent
    zoo releases will begin to use the new C, which in the current release are
    not yet available.
  
  * new roll*r() wrappers which default to align = "right".

  * new na.fill() function.

  * new na.StructTS() function for seasonal NA interpolation using R's StructTS().

  * rev() method for zooreg objects added.

  * transform() method added.
  
  * added "frequency" argument to as.zooreg() generic and associated methods.
  

Changes in Version 1.6-5

  * Fixed a technical error in the Sweave commands of zoo-faq.Rnw which
    throws an error in the current R-devel (2.14.0 to be).


Changes in Version 1.6-4

  * names were automatically added to indexes in some cases hugely increasing
    the size of the index. This is no longer done.

  * diff can have a negative lag argument (for forward diffs). Previously
    only positive was allowed.

  * na.locf now calls na.approx with method = "constant" unless fromLast = TRUE.
    In particular, arguments x and xout can be passed to na.locf which is used
    in alignment applications.

  * merge has check.names argument. If check.names = TRUE (the default)
    then column names will be valid syntactic names.

  * read.zoo's index.column argument can be a list such that FUN is called via
    do.call(FUN, L) where i in list L is replaced with x[,i].

  * added workaround in Ops.zoo to circumvent rare bug in base R

  * added a median.zoo method

  * added a quantile.zoo method


Changes in Version 1.6-3

  * new generic function xblocks() for plotting contiguous blocks along
    the x-axis (intended for base graphics). A default method along with
    "zoo" and "ts" methods is provided.

  * new function na.aggregate().

  * new maxgap argument for na.*() methods. Further refinements for
    many na.*() methods, especially na.approx() and na.spline().

  * xyplot() method rewritten; is now a wrapper around the xyplot()
    method for "ts" objects in the "lattice" package (lattice:::xyplot.ts).
    Accompanying infrastructure (llines(), lpoints(), ltext(), etc.),
    help page, and examples have been substantially revised and expanded.

  * new question #13 added to "zoo-faq" vignette

  * FUN argument of aggregate() method now defaults to sum for consistency with
    aggregate() method for "ts". Previously it had no default.

  * new MATCH() method for "times" class.


Changes in Version 1.6-2

  * minor improvement in zoo-faq.Rnw for new R-devel.


Changes in Version 1.6-1

  * xtfrm() methods for yearmon/yearqtr added.

  * enhanced documentation to emphasize that there is typically no
    need for an ORDER() method if there is an appropriate xtfrm()
    method.

  * Bug fix in group generic functions for yearmon/yearqtr with
    non-numeric return values.


Changes in Version 1.6-0

  * tis graphics support

  * workaround to eliminate as.Date.numeric() warning when zoo loads

  * read.zoo() now optionally accepts a data frame for the file argument

  * better error message in read.zoo() if NAs found in index

  * read.zoo() now accepts a split argument that allows reading in of datasets
    in long format (where long is as defined in R's reshape command)

  * methods for cbind(), merge(), rbind(), and c() now ignore NULL arguments

  * fixed unique() methods for "yearmon" and "yearqtr" objects  

  * fixed a bug in group generic functions and -() generic for
    "yearmon" and "yearqtr" objects

  * plot.zoo now accepts vector lwd

  * new rev() method for "zoo" objects


Changes in Version 1.5-8

  * bug fixes in unique() methods for yearmon/yearqtr
  

Changes in Version 1.5-7

  * added "zoo" methods for xtfrm(), split(), and subset()

  * as.zoo() methods for "xts", "tis", "fts", and "mcmc" objects (the other
    direction being handled by the respective packages)
  
  * improvements in yearmon and yearqtr:
    - added range(), unique(), and is.numeric() methods
    - is.numeric() methods return FALSE
    - as.yearmon() now also accepts "%b %Y" as a default format so
      as.yearmon(as.character(ym)) where ym is yearmon now works

  * fixed strip argument in xyplot() method (thanks to Christian Gunning)

  * lag() method for "zooreg" objects now has an na.pad argument,
    like the corresponding "zoo" method. Additinal bug fix.

  * head() and tail() methods now allow second argument to be negative

  * added is.na argument to na.trim()

  * ORDER() methods for "chron", "dates", and "times" objects added.
    Without these order has become very slow when using older versions of
    the chron package (although the most recent version of chron has no
    slowdown even without this fix as it implements xtfrm()).


Changes in Version 1.5-6

  * changed dependency in coercion functions and vignettes from
    fCalendar/fSeries to timeDate/timeSeries


Changes in Version 1.5-5

  * documentation enhancements for new Rd parser


Changes in Version 1.5-4

  * improvments in read.zoo()
  
  * updates in zoo FAQ

  * small bug fix in plot.zoo() (ylim handling)

  * small bug fixes in axis.yearmon() and axis.yearqtr()

  * small bug fixes in aggregate.zoo()

  * extended examples for plot.zoo(), xyplot.zoo(), aggregate.zoo()

  * interactive plots/demos using the packages "TeachingDemos"
    (plot.zoo) and "playwith" (xyplot.zoo)

  * mean.yearmon and Sys.yearmon are defined. Similarly for yearqtr.

  * min, max and range methods for yearmon are defined via Summary

Changes in Version 1.5-3

  * export as.Date.numeric() so that it does not get shadowed
    by the new as.Date.numeric() in "stats" (from 2.7.0 on).
    Both functions are almost identical, the version in zoo
    just sets the default origin = 1970-01-01.

  * added some glue for communication between "zoo" and "timeSeries":
    new MATCH() and ORDER() methods for "timeDate", new as.zoo()
    method for "timeSeries" objects (the inverse will be added to
    fSeries).
    
  * improved the zoo vignette, updating/correcting the information
    about timeDate and timeSeries.


Changes in Version 1.5-2

  * read.zoo has new aggregate function argument to aggregate duplicate times

  * new with.zoo method added

  * FAQ updated


Changes in Version 1.5-0

  * new $.zoo and $<-.zoo methods

  * read.zoo now passes format and tz to FUN if they are specified. If
    FUN is not specified but tz and format specified then POSIXct translation 
    is done with respect to the specified format string.

  * months.yearmon, quarters.yearmon, cycle.yearmon methods added

  * months.yearqtr, quarters.yearqtr, cycle.yearqtr methods added

  * as.yearqtr.character now accepts %q and default formats are
    "%Y Q%q", "%Y q%q" and "%Y-%q".

  * yearqtr.factor and yearmon.factor added

  * as.yearmon.yearqtr now has frac argument consistent with as.Date.yearmon

  * format.yearqtr and as.character.yearqtr performance speedup for the
    common case of default format.


Changes in Version 1.4-2

  * The processing of regular series in aggregate.zoo()
    was changed. By default, a regular series is only
    created if the original series was regular. Otherwise,
    a regular series is only created if indicated (by
    setting argument regular = TRUE or by supplying a
    specific frequency).

  * zoo FAQ vignette added

  * axis.yearqtr and axis.yearmon improved. They no longer
    use axis.Date.
    
  * as.yearmon.character accepts "%Y-%m" default format (as well 
    as prior default of "%Y-%m-%d")

  * new summary() methods for yearmon/yearqtr objects which
    simply report the summary of the underlying numeric vector.

  * na.locf.default now uses fromLast= (consistent with the R 
    duplicated function). It is similar to the rev= argument
    (which will be deprecated).

  * comparisons between yearmon variables and character variables
    that can be coerced to yearmon via as.yearmon now work. This 
    also lets character variables be used in start= and end= 
    arguments of window.zoo for zoo series with a yearmon index
    (since window.zoo already allows such usage for any index class 
    that can be compared to character). Similarly for yearqtr.


Changes in Version 1.4-1

  * replaced by() calls by tapply() due to fixes in R
    2.6.1-patched that caused errors in plot.zoo().
    

Changes in Version 1.4-0

  * added a write.zoo() function that writes zoo series to
    a text file via write.table(). The index is included in
    the first column so that it can be easily read again
    using read.zoo().

  * read.zoo() has a new argument index.column (default: 1)
    which can be used to specify in which column of a data
    file the index/time is stored.

  * rapply() was removed from zoo - after being deprecated
    since zoo 1.2-0 (and R 2.4.0) and replaced by rollapply().

  * improved str() method for "zoo" and "zooreg" series, now
    gives explicit information about class, start and end,
    as well as data, index (and frequency).
    
  * zoo() now has a default first argument like ts() has.
    By default, zoo() is now zoo(NULL) and returns an empty
    series. This differs somewhat from the default ts()
    and zooreg() that return ts(NA) zooreg(NA), respectively.

  * added ... arguments to the as.POSIXct and as.POSIXlt
    methods
    
  * implementation of as.Date.numeric() has been modified:
    being backward compatible with the old zoo:::as.Date.numeric().
    It now matches the new (2.7.0 to be) base:::as.Date.numeric(),
    but also sets a default "origin" argument (1970-01-01).

  * plot.type argument of plot.zoo() now chooses its default 
    value via the screen argument.


Changes in Version 1.3-2

  * merge.zoo() has been improved so that unnecessary checking of
    frequencies is avoided for "zoo" objects.


Changes in Version 1.3-1

  * as.yearmon() can take format arguments that do not involve day,
    e.g. as.yearmon("2007-01", "%Y-%m")

  * added as.data.frame() methods for "yearmon" and "yearqtr"
    objects
    

Changes in Version 1.3-0

  * checking for non-unique index entries has been improved:
    zoo() throws a warning if a series with non-unique index entries
    is created. merge() gives a more useful error message.

  * inconsistencies when checking for regularity of series have been
    resolved: is.regular(), frequency(), frequency<-() etc. all behave
    consistently now.

  * custom panel functions in plot.zoo can now refer to 
    parent.frame()$panel.number to determine the current panel. Also
    added an example of this to ?plot.zoo.

  * read.zoo() will behave consistently when the file contains no data.
  
  * column names (if any) are checked now in rbind.zoo(), producing a
    similar behaviour as in rbind.data.frame()


Changes in Version 1.2-2

  * the order of arguments (... now come after FUN) in rollapply has
    been changed to allow unnamed additional arguments to be specified
    for FUN. Previously they had to be named.

  * bug in as.ts.zooreg fixed

Changes in Version 1.2-1

  * One of the examples on ?xyplot.zoo does not run with the
    R 2.4.0 lattice. It is currently placed in \dontrun{}
    (see comments in ?xyplot.zoo).


Changes in Version 1.2-0

  * rapply() was re-named to rollapply() because from R 2.4.0 on,
    base R provides a function rapply() for recursive (not rolling)
    application of functions, which was already described in the Green
    Book. zoo::rapply() still exists for backward compatibility, however,
    it is flagged as deprecated and now dispatches to rollapply() methods.

  * added methods for xyplot() from package "lattice" for classes "zoo",
    "ts", "its". These functions are still under development and the
    interface and functionality might be modified/extended in future
    releases.
  
  * new function make.par.list() (which was previously a local function
    parm() in zoo's plot() method) for processing named argument lists.
    Useful in plotting routines like the plot() and xyplot() methods,
    see ?make.par.list.

  * subscripting by a "zoo" object whose data is logical is now defined, e.g.
      z <- zoo(1:10); z[z > 3] 
    However, assignment such as
      z[z > 3] <- 2 * z[z > 3]
    does not work.
  
  * fixed a bug in zoo() when ordered factors are supplied ("ordered"
    class was dropped)

  * fixed bug in subscripting for drop = TRUE and length of result is 1

  * fixed bug in na.trim(x, "right")

  * all= argument of merge.zoo is coerced to logical so one can do this:
    merge(zoo(2:4, 2:4), zoo(1:3), all = 0:1)


Changes in Version 1.1-1

  * added na.spline() generic and default method for replacing
    NAs via cubic spline interpolation
    
  * rbind() method now exported explicitly again


Changes in Version 1.1-0

  * added a NAMESPACE, many S3 methods are not exported explicitly
    anymore

  * new argument `regular' in read.zoo() which is set to FALSE. Only if
    set to TRUE the series read is coerced to "zooreg" (if possible), 
    which was the previous default behaviour.
    
  * suppressWarnings() was added in is.regular() and frequency() functions
    which try() to convert indexes to numerics which might lead to errors
    or warnings and NAs (e.g., for characters), both should be fully suppressed
    now.


Changes in Version 1.0-7

  * added a `...' argument to as.data.frame() method for
    complying with R 2.4.0

  * improved handling of `by' argument in aggregate() method


Changes in Version 1.0-6

  * ?zoo now explicitly points out that the index of 
    zoo objects should have unique observations (aka 
    time stamps).
    
  * The summary() was fixed to work also with duplicated
    indexes.
    
  * scale() method added.

  * lines(x, y, ...) now supported.

  * points added.

  * -.yearmon and -.yearqtr added.
 
  * axis.yearmon and axis.yearqtr added.

  * Axis.yearmon and Axis.yearqtr added.

  * na.trim generic and default method added.

Changes in Version 1.0-5

  * added a `y' argument to plot.zoo() that allows to
    generate scatter plots of univariate "zoo" series
    (just as plot.ts(x, y = NULL, ...) does)
    
  * fixed the usage of %in% in the window() methods,
    now call MATCH() (rather than match()) directly.


Changes in Version 1.0-4

  * added a `rev' argument to na.locf() which allows to
    eliminate NAs by NOCB (next observation carried backward).


Changes in Version 1.0-3

  * added a barplot.zoo() method

  * fixed frequency.zoo() which returned NA instead of NULL
    for indexes of class "character"

  * added an example to zoo-quickref for querying daily
    exchange rates from oanda.com via get.hist.quote().
    This contains a worked example how to omit weekends
    from daily series.
    
  * added an na.pad argument to diff.zoo() method


Changes in Version 1.0-2

  * Small enhancements of plot.zoo()

  * Bug fixes in na.locf.default(), as.data.frame.zoo(),
    lag.zoo(), lag.zooref().
    

Changes in Version 1.0-1

  * Convenience function read.zoo() for reading "zoo" series directly
    from plain text files.
    
  * New vignette `zoo-quickref' with a quick reference particularly
    aimed at (daily) financial series (contributed by Ajay Shah).

  * plot.zoo now has screens=, widths= and heights= arguments for controlling
    which series are plotted in which graphs and widths and heights of graphs.
    The ylim= argument has been enhanced.

  * argument k= can be vector in lag.zoo (suggested by Roger Koenker)

  * na.locf.default bug fixed


Changes in Version 1.0-0

  * This release accompanies the publication in the Journal of Statistical
    Software ("zoo: S3 Infrastructure for Regular and Irregular Time Series",
    JSS, 14(6), 1-27) that essentially corresponds to the vignette contained
    in the package. Please use this paper to cite zoo in publications.

  * aggregate.zoo allows a function as the argument for computing
    the aggregation groups. The return value is coerced to "zooreg"
    if it is.regular.

  * extended NA handling for lists and data.frames: na.locf.data.frame,
    na.locf.list, na.contiguous.data.frame, na.contiguous.list
    
  * pair notation, e.g. c(1985,2), for "zooreg" series is now also
    allowed in window.zoo and window<-.zoo.

  * fixed bug in rapply: result was transposed when by.column = FALSE and
    a non-scalar function FUN was used.


Changes in Version 0.9-9

  * regular "zoo" series: objects of class "zooreg" (inheriting from "zoo")
    can be used to store strictly regular series (similar to "ts" objects)
    or series with an underlying regularity (as before but with observations
    omitted). They have a frequency attribute that can be used for conversion
    between "zoo" and "ts". The function is.regular() can be used for 
    checking the regularity of a series.

  * improved merge() method: merge.zoo now accepts non-zoo arguments
    (other than first) if all non-zoo args have the same NROW value
    as the first argument (or are scalar). In that case the non-zoo
    args are given the index of the first series. Scalars are added
    for the full index of the merged series.

  * merge() zoo can now optionally return a "data.frame" that contains
    the numeric columns as "zoo" series and the "zoo" objects created
    from factors converted back to "factor".
    
  * [.zoo allows now indexing using observations from the index scale
    (and not only observation numbers).

  * rapply, rollmean, rollmax, rollmedian to perform rolling analyses

  * extended functionality to plot.zoo type argument

  * when plot.zoo used with one series list(...) can be omitted from 
    various plotting parameter arguments

  * print.zoo documentation fix for R 2.1.0

  * yearmon and yearqtr datetime classes

  * head.ts, tail.ts

  * c.zoo, range.zoo

  * coredata.default, coredata.ts


Changes in Version 0.9-1

  * new generic functions ORDER() and MATCH() (with
    order() and match() as the default) so that zoo()
    can handle  arbitrary index/time classes when
    suitable methods for the generic function c(),
    length(), order(), match() and subsetting [, are
    supplied.

  * improved printing of "zoo" objects and added
    a summary() method.
    
  * extended coercion functionality to and from
    "zoo" objects. "its" objects can be coerced to
    "zoo" and vice versa. "zoo" objects can be 
    coerced to vector, matrix, data.frame or list.
    
  * added functionality to extract/assign to
    the coredata() of a "zoo" object.
    
  * added/improved functionality to extract/assign
    to the window() of a "zoo" object.
    
  * added/improved functionality to extract/assign
    to the index() or time() of a "zoo" object.
    
  * added lag(), diff(), start(), end(), head(),
    tail() methods.

  * improved plot.zoo() by more flexible expansion
    of plotting parameters such as col, lty and pch.

  * added a cbind() method for "zoo" objects (almost
    synonymous with merge())
  
  * NA handling for "zoo" objects via na.omit(),
    na.contiguous(), na.approx() and na.locf().

  * na.locf() generic function with default method (suitable
    for "zoo" objects) which implements Last Observation
    Carried Forward.
  
  * na.approx() generic function with default method (suitable
    for "zoo" objects) which implements elimination of NAs
    by interpolation.
  
  * added mathematical methods: group generic functions
    for "zoo" objects, t(), cumsum(), cumprod(), cummin(),
    and cummax().

  * added model.frame.AsIs and model.frame.zoo to support
    regression based on zoo objects, in particular with lm()
    (but also many other regression functions).

  * Zero length vector zoo objects may have non-zero index vectors 
    intended to be used in merge to extend zoo objects. zoo
    changed to enable the creation of such objects by omitting
    first argument.

  * added a vignette explaining the new features
  

Changes in Version 0.2-0

  * zoo() now has defaults for both arguments x and order.by,
    which mimic the default behaviour of ts().

  * added new aggregate.zoo() method for computing summary
    statistics of "zoo" objects along a coarser index grid.

  * improved merge.zoo() in three directions:
    1. handling of "zoo" objects with zero columns,
    2. naming of columns in the merged "zoo" object
       which behaves more like merge.data.frame();
       a corresponding suffixes argument has also been added,
    3. introced a fill argument which allows to fill gaps
       by another value than NA.
       
  * improved documentation with extended examples

