Thanks Marc and Gabor, I got it!

On 1/20/08, Marc Schwartz <marc_schwartz@comcast.net> wrote:
>
> tom soyer wrote:
> > Hi,
> >
> > I am trying to extract data from a ts object by month, e.g., extract
> Jan,
> > Feb, and Aug data from a monthly ts object. I tried the following but it
> > didn't work:
> >
> >> xa=1:50
> >> ta=ts(xa,start=c(1990,1),frequency=12)
> >> ta[cycle(ta)==c(1,2)] # this method works but it's not what I want
> >  [1]  1  2 13 14 25 26 37 38 49 50
> >> ta[cycle(ta)==c(1,2,8)] # this method doesn't work, unfortunately
> >  [1]  1  2 13 14 25 26 37 38 49 50
> > Warning message:
> > In `==.default`(cycle(ta), c(1, 2, 8)) :
> >   longer object length is not a multiple of shorter object length
> >
> > somehow ta[cycle(ta)==c(1,2)] works. But what I really need is for
> > ta[cycle(ta)==c(1,2,8)] to work, and it doesn't. Does anyone know how
> could
> > to do this kinds of data extraction?
> >
> > Thanks!
>
> Tom,
>
> You need to use %in% when you want to test whether one or more values
> are in a second set of values.
>
> In this case:
>
> > ta[cycle(ta) %in% c(1, 2, 8)]
> [1]  1  2  8 13 14 20 25 26 32 37 38 44 49 50
>
>
>
> BTW, the use of:
>
> > ta[cycle(ta) == c(1, 2)]
> [1]  1  2 13 14 25 26 37 38 49 50
>
> results in a correct response, but largely by chance in this case
> because of the way in which the data is stored. You should be using:
>
> > ta[cycle(ta) %in% c(1, 2)]
> [1]  1  2 13 14 25 26 37 38 49 50
>
>
> Note however, that if we use:
>
> > ta[cycle(ta) == c(1, 3)]
> [1]  1 13 25 37 49
>
> we do not get the correct answer, which should be:
>
> > ta[cycle(ta) %in% c(1, 3)]
> [1]  1  3 13 15 25 27 37 39 49
>
>
> See ?"%in%" for more information.
>
> HTH,
>
> Marc Schwartz
>
>


-- 
Tom

	[[alternative HTML version deleted]]

