# switching elements of a vector

7 messages
Open this post in threaded view
|

## 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
Open this post in threaded view
|

## Re: switching elements of a vector

 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 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: switching elements of a vector

 In reply to this post by speretti 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 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

## Re: switching elements of a vector

 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...
Open this post in threaded view
|

## Re: switching elements of a vector

 In reply to this post by speretti Try this: > which(diff(a) > 0) + 1 [1]  2  6  9 12 14 15 On Mon, May 24, 2010 at 6:02 AM, speretti <[hidden email]> 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. > > ______________________________________________ > [hidden email] 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. > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.