Last chance! 50% off unlimited learning
Sale ends in
"merge"(..., all = TRUE, fill = NA, suffixes = NULL, check.names = FALSE, retclass = c("zoo", "list", "data.frame"), drop = TRUE)
"zoo"
."zoo"
objects to be merged (otherwise expanded)."zoo"
objects (if any)."zoo"
objects specifying the suffixes to be used for making
the merged column names unique.link{read.table}
."zoo"
(the default), "list"
or NULL
. For
details see below."zoo"
object without observations is
merged with a one-dimensional "zoo"
object (vector or 1-column
matrix), should the result be a vector (drop = TRUE
) or a
1-column matrix (drop = FALSE
)? The former is the default
in the Merge
method, the latter in the cbind
method."zoo"
if retclass="zoo"
, an object of
class "list"
if retclass="list"
or modified arguments as
explained above if retclass=NULL
. If the result is an object
of class "zoo"
then its frequency is the common frequency of its
zoo arguments, if they have a common frequency.
merge
method for "zoo"
objects combines the columns
of several objects along the union of the dates
for all = TRUE
, the default,
or the intersection of their dates for all = FALSE
filling up the created gaps (if any) with the fill
pattern.The first argument must be a zoo
object. If any of the remaining
arguments are plain vectors or matrices with the same length or number
of rows as the first argument then such arguments are coerced to "zoo"
using as.zoo
. If they are plain but have length 1 then they are
merged after all non-scalars such that their column is filled with the
value of the scalar.
all
can be a vector of the same length as the number of "zoo"
objects to merged (if not, it is expanded): All indexes
(times) of the objects corresponding to TRUE
are included, for those
corresponding to FALSE
only the indexes present in all objects are
included. This allows intersection, union and left and right joins
to be expressed.
If retclass
is "zoo"
(the default) a single merged "zoo"
object is returned. If it is set to "list"
a list of "zoo"
objects is returned. If retclass = NULL
then instead of returning a value it updates each
argument (if it is a variable rather than an expression) in
place so as to extend or reduce it to use the common index vector.
The indexes of different
"zoo"
objects can be of different classes and are coerced to
one class in the resulting object (with a warning).
The default cbind
method is essentially the default merge
method, but does not support the retclass
argument.
The rbind
method combines the dates of the "zoo"
objects (duplicate dates are
not allowed) and combines the rows of the objects. Furthermore, the
c
method is identical to the rbind
method.
zoo
## simple merging
x.date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-"))
x <- zoo(rnorm(5), x.date)
y1 <- zoo(matrix(1:10, ncol = 2), 1:5)
y2 <- zoo(matrix(rnorm(10), ncol = 2), 3:7)
## using arguments `fill' and `suffixes'
merge(y1, y2, all = FALSE)
merge(y1, y2, all = FALSE, suffixes = c("a", "b"))
merge(y1, y2, all = TRUE)
merge(y1, y2, all = TRUE, fill = 0)
## if different index classes are merged, as in
## the next merge example then ## a warning is issued and
### the indexes are coerced.
## It is up to the user to ensure that the result makes sense.
merge(x, y1, y2, all = TRUE)
## extend an irregular series to a regular one:
# create a constant series
z <- zoo(1, seq(4)[-2])
# create a 0 dimensional zoo series
z0 <- zoo(, 1:4)
# do the extension
merge(z, z0)
# same but with zero fill
merge(z, z0, fill = 0)
merge(z, coredata(z), 1)
## merge multiple series represented in a long form data frame
## into a multivariate zoo series and plot, one series for each site.
## Additional examples can be found here:
## https://stat.ethz.ch/pipermail/r-help/2009-February/187094.html
## https://stat.ethz.ch/pipermail/r-help/2009-February/187096.html
##
m <- 5 # no of years
n <- 6 # no of sites
sites <- LETTERS[1:n]
set.seed(1)
DF <- data.frame(site = sites, year = 2000 + 1:m, data = rnorm(m*n))
tozoo <- function(x) zoo(x$data, x$year)
Data <- do.call(merge, lapply(split(DF, DF$site), tozoo))
plot(Data, screen = 1, col = 1:n, pch = 1:n, type = "o", xlab = "")
legend("bottomleft", legend = sites, lty = 1, pch = 1:n, col = 1:n)
## for each index value in x merge it with the closest index value in y
## but retaining x's times.
x<-zoo(1:3,as.Date(c("1992-12-13", "1997-05-12", "1997-07-13")))
y<-zoo(1:5,as.Date(c("1992-12-15", "1992-12-16", "1997-05-10","1997-05-19", "1997-07-13")))
f <- function(u) which.min(abs(as.numeric(index(y)) - as.numeric(u)))
ix <- sapply(index(x), f)
cbind(x, y = coredata(y)[ix])
## this merges each element of x with the closest time point in y at or
## after x's time point (whereas in previous example it could be before
## or after)
window(na.locf(merge(x, y), fromLast = TRUE), index(x))
Run the code above in your browser using DataLab