switching elements of a vector

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

switching elements of a vector

speretti
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
Reply | Threaded
Open this post in threaded view
|

Re: switching elements of a vector

Chuck Cleland
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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: switching elements of a vector

schuster
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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: switching elements of a vector

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

Re: switching elements of a vector

Gabor Grothendieck
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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: switching elements of a vector

speretti
it works as well!
Reply | Threaded
Open this post in threaded view
|

Re: switching elements of a vector

Bert Gunter
In reply to this post by speretti
And, just for kicks, a yet another (somewhat inefficient)solution:

match(unique(a),a)

Cheers,

Bert Gunter
Genentech Nonclinical Statistics

-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On
Behalf Of speretti
Sent: Monday, May 24, 2010 3:03 AM
To: [hidden email]
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.

______________________________________________
[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-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.