Thanks Achim. Data manipulation in zoo and coerce back to ts. Sounds good!

On 1/10/08, Achim Zeileis <Achim.Zeileis@wu-wien.ac.at> wrote:
>
> On Thu, 10 Jan 2008, tom soyer wrote:
>
> > Hi,
> >
> > I have two questions about ts.
> >
> > (1) How do I subset a ts object and still preserve the time index? for
> > example:
> >
> > > x=ts(1:10, frequency = 4, start = c(1959, 2)) # the ts object
> > > x
> >      Qtr1 Qtr2 Qtr3 Qtr4
> > 1959         1    2    3
> > 1960    4    5    6    7
> > 1961    8    9   10
> > I don't want the 1st 2 elements, so I could subset like this:
> > > x[3:length(x)]
> > [1]  3  4  5  6  7  8  9 10
> >
> > But then the time index is lost. I could use window(), but then I have
> to
> > specify start and end manually. Is there a way to subset a ts object so
> that
> > the time index is preserved for the data extracted without specifying
> start
> > and end data by hand?
>
> I think window() is the way to go with "ts".
> "zoo"/"zooreg" additionally provide what you ask for:
>
> library("zoo")
> x <- ts(1:10, frequency = 4, start = c(1959, 2))
> z <- as.zoo(x)
> z[3:length(z)]
>
> The time formatting is somewhat nice when you declare explicitely that
> this is "yearqtr" data:
>
> time(z) <- as.yearqtr(time(z))
> z[3:length(z)]
>
> > (2) How do I join two ts objects together end to end? for example:
> > > x=ts(1:10, frequency = 4, start = c(1959, 2)) # the 1st ts object
> > > y=ts(11:15, frequency = 4, start = c(1961, 4)) # the 2nd ts object
> >
> > As you can see, y is just a continuation of x. I would like to add y to
> the
> > end of x while preserving the time index. I could use this:
> > > ts(c(x,y),start=start(x),frequency=4)
> >
> > But I am wondering if there is a more efficient way of doing this, i.e.,
> is
> > it really necessary to specify start and frequency again when they are
> > already a part of the original ts objects?
>
> "zoo" also provides this:
>
> x <- ts(1:10, frequency = 4, start = c(1959, 2))
> y <- ts(11:15, frequency = 4, start = c(1961, 4))
> c(as.zoo(x), as.zoo(y))
>
> or you can also coerce back to "ts"
>
> as.ts(c(as.zoo(x), as.zoo(y)))
>
> Personally, I tend to do my data manipulations in "zoo" (not very
> surprisingly ;-)) but might coerce the resulting series to "ts" if I want
> to use certain modeling functions.
> Z
>
>
>
>


-- 
Tom

	[[alternative HTML version deleted]]


