[R] Retrieve indexes of the "first occurrence of numbers" in an effective manner

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Thu Dec 27 20:33:12 CET 2012


x <- c(1,1,2,2,3,3,4,4)
match(unique(x),x)
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

Emmanuel Levy <emmanuel.levy at gmail.com> wrote:

>Hi,
>
>That sounds simple but I cannot think of a really fast way of getting
>the following:
>
> c(1,1,2,2,3,3,4,4) would give c(1,3,5,7)
>
>i.e., a function that returns the indexes of the first occurrences of
>numbers.
>
>Note that numbers may have any order e.g., c(3,4,1,2,1,1,2,3,5), can
>be very large, and the vectors are also very large (which prohibits
>any loop).
>
>The best I could think of is:
>
>tmp = c(1,1,2,2,3,3,4,4)
>u = unique(tmp)
>sapply(u, function(x){ which(!is.na(match(tmp,x)))[1]} )
>
>But there might be a useful function I don't know ..
>
>Thanks for any hint.
>All the best,
>
>Emmanuel
>
>______________________________________________
>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.




More information about the R-help mailing list