Building on Jessica and Steve's use of embed: > X <- c(NA, 1, NA, 1, 1, 1, 1, 1, 1, NA, 1) > Z <- rowSums(embed(X, 3)) > Z[is.na(Z)] <- 1 > Z [1] 1 1 1 3 3 3 3 1 1
---------------------------------------------- David L Carlson Associate Professor of Anthropology Texas A&M University College Station, TX 77843-4352 > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-bounces@r- > project.org] On Behalf Of Jessica Streicher > Sent: Monday, October 08, 2012 9:19 AM > To: Mike Spam > Cc: r-help@r-project.org > Subject: Re: [R] Simple - Finding vector in a vector > > > x<-c(NA , 1 ,NA, 1 , 1 , 1 , 1 , 1 ,1 ,NA , 1) > > embed(x,3) > [,1] [,2] [,3] > [1,] NA 1 NA > [2,] 1 NA 1 > [3,] 1 1 NA > [4,] 1 1 1 > [5,] 1 1 1 > [6,] 1 1 1 > [7,] 1 1 1 > [8,] NA 1 1 > [9,] 1 NA 1 > > > which(rowSums(embed(x,3))==3) > [1] 4 5 6 7 > > gives you the first of the 3 > > On 08.10.2012, at 15:38, Mike Spam wrote: > > > Sorry, i just realized, that it output the sum of all vectors. I can > > work with this function but it would be much faster and easier if it > > would be possible to get the positions of evry match. > > > > example: > > > > NA 1 NA 1 1 1 1 1 1 NA 1 > > > > rle returns > > lengths: int [1:6] 1 1 1 6 1 1 > > > > what i need would be something like, > > 1 1 1 3 3 3 3 1 1 > > > > but anyway i can work with rle, if there is no suitable function. > > > > thanks, > > Nico > > > > > > > > 2012/10/8 Mike Spam <ichmags...@googlemail.com>: > >> Hey Rui, > >> > >> Perfect! Thanks!! :) > >> > >> Nico > >> > >> 2012/10/8 Rui Barradas <ruipbarra...@sapo.pt>: > >>> Hello, > >>> > >>> See ?rle > >>> > >>> Hope this helps, > >>> > >>> Rui Barradas > >>> Em 08-10-2012 13:55, Mike Spam escreveu: > >>>> > >>>> Hi, > >>>> > >>>> just a simple question. > >>>> Assumed i have a vector, > >>>> > >>>> FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE > >>>> or > >>>> NA 1 1 1 NA 1 NA 1 NA > >>>> > >>>> what i need is the position where an element is the same - three > (or > >>>> in general multiple) times in a row. > >>>> > >>>> in this case: i want to get the position where it is TRUE TRUE > TRUE or 1 1 > >>>> 1 > >>>> it doesn't matter if it is the first, middle or last element. So > the > >>>> output could be 2 or 3 or 4 > >>>> > >>>> My idea would be to lag the vector and calc differences... but i > would > >>>> prefer any build in (or time saving) function. :) > >>>> > >>>> thanks, > >>>> > >>>> Nico > >>>> > >>>> ______________________________________________ > >>>> R-help@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. > >>> > >>> > > > > ______________________________________________ > > R-help@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. > > ______________________________________________ > R-help@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. ______________________________________________ R-help@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.