Re: [R] question about subset and join ts object(s)

From: tom soyer <tom.soyer_at_gmail.com>
Date: Thu, 10 Jan 2008 09:40:59 -0600

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

On 1/10/08, Achim Zeileis <Achim.Zeileis_at_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]]

______________________________________________
R-help_at_r-project.org mailing list
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.
Received on Thu 10 Jan 2008 - 15:45:23 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 10 Jan 2008 - 16:30:06 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive