Hi, I would like to receive help for the following matter: If I'm dealing with a numeric vectors containing increasing elements. i.e. a<-c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) There exist an efficient way to obtain an vector that indicates the position of the changing element of "a"? In this case it would be something like: index<-c(1,6,9,12,14,15) usually I'm used cycles to obtain boolean vectors of the same length of "a" indicating the changing elements ...later I've muliplied them for their numeric sequence and after that I've selected elements different from zero ...it is quite long... can you find an easier solution? Thank you for you help -- View this message in context: http://r.789695.n4.nabble.com/switching-elements-of-a-vector-tp2228373p2228373.html Sent from the R help mailing list archive at Nabble.com.
On 5/24/2010 6:02 AM, speretti wrote:> Hi, > > I would like to receive help for the following matter: > > If I'm dealing with a numeric vectors containing increasing elements. > i.e. > > a<-c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) > > There exist an efficient way to obtain an vector that indicates the position > of the changing element of "a"? > In this case it would be something like: > > index<-c(1,6,9,12,14,15)a <- c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) rle(a) Run Length Encoding lengths: int [1:7] 1 4 3 3 2 1 3 values : num [1:7] 1 2 3 4 5 6 7 cumsum(head(rle(a)$lengths, -1)) + 1 [1] 2 6 9 12 14 15 ?rle> usually I'm used cycles to obtain boolean vectors of the same length of "a" > indicating the changing elements ...later I've muliplied them for their > numeric sequence and after that I've selected elements different from zero > ...it is quite long... > can you find an easier solution? > > Thank you for you help-- Chuck Cleland, Ph.D. NDRI, Inc. (www.ndri.org) 71 West 23rd Street, 8th floor New York, NY 10010 tel: (212) 845-4495 (Tu, Th) tel: (732) 512-0171 (M, W, F) fax: (917) 438-0894
Hi, is this what you need? b <- c(NA, a[1:length(a)-1]) # shift values of a one step to the right which(a-b == 1) On Monday 24 May 2010 12:02:55 pm speretti wrote:> Hi, > > I would like to receive help for the following matter: > > If I'm dealing with a numeric vectors containing increasing elements. > i.e. > > a<-c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) > > There exist an efficient way to obtain an vector that indicates the > position of the changing element of "a"? > In this case it would be something like: > > index<-c(1,6,9,12,14,15) > > usually I'm used cycles to obtain boolean vectors of the same length of "a" > indicating the changing elements ...later I've muliplied them for their > numeric sequence and after that I've selected elements different from zero > ...it is quite long... > can you find an easier solution? > > Thank you for you help >-- ---- Friedrich Schuster Dompfaffenweg 6 69123 Heidelberg
Thank you ! Great answers...now it seems very easy... As usual...a the obviousness of a solution depends on how you face the problem... Thank you for help me in find the good approaches... -- View this message in context: http://r.789695.n4.nabble.com/switching-elements-of-a-vector-tp2228373p2228427.html Sent from the R help mailing list archive at Nabble.com.
Try this:> which(diff(a) > 0) + 1[1] 2 6 9 12 14 15 On Mon, May 24, 2010 at 6:02 AM, speretti <sabrina.peretti at gmail.com> wrote:> > Hi, > > I would like to receive help for the following matter: > > If I'm dealing with a numeric vectors containing increasing elements. > i.e. > > a<-c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) > > There exist an efficient way to obtain an vector that indicates the position > of the changing element of "a"? > In this case it would be something like: > > index<-c(1,6,9,12,14,15) > > usually I'm used cycles to obtain boolean vectors of the same length of "a" > indicating the changing elements ...later I've muliplied them for their > numeric sequence and after that I've selected elements different from zero > ...it is quite long... > can you find an easier solution? > > Thank you for you help > -- > View this message in context: http://r.789695.n4.nabble.com/switching-elements-of-a-vector-tp2228373p2228373.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >
it works as well! -- View this message in context: http://r.789695.n4.nabble.com/switching-elements-of-a-vector-tp2228373p2228485.html Sent from the R help mailing list archive at Nabble.com.
And, just for kicks, a yet another (somewhat inefficient)solution: match(unique(a),a) Cheers, Bert Gunter Genentech Nonclinical Statistics -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of speretti Sent: Monday, May 24, 2010 3:03 AM To: r-help at r-project.org Subject: [R] switching elements of a vector Hi, I would like to receive help for the following matter: If I'm dealing with a numeric vectors containing increasing elements. i.e. a<-c(1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,7,7) There exist an efficient way to obtain an vector that indicates the position of the changing element of "a"? In this case it would be something like: index<-c(1,6,9,12,14,15) usually I'm used cycles to obtain boolean vectors of the same length of "a" indicating the changing elements ...later I've muliplied them for their numeric sequence and after that I've selected elements different from zero ...it is quite long... can you find an easier solution? Thank you for you help -- View this message in context: http://r.789695.n4.nabble.com/switching-elements-of-a-vector-tp2228373p22283 73.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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.