[R] return first index for each unique value in a vector
William Dunlap
wdunlap at tibco.com
Wed Aug 29 05:22:36 CEST 2012
Here are two methods:
> A<-c(9,2,9,5)
> f1 <- function(x) { d <- !duplicated(x) ; data.frame(uniqueValue=x[d], firstIndex=which(d)) }
> f2 <- function(x) { u <- unique(x) ; data.frame(uniqueValue=u, firstIndex=match(u, x))}
> f1(A)
uniqueValue firstIndex
1 9 1
2 2 2
3 5 4
> identical(f1(A), f2(A))
[1] TRUE
> A6 <- sample(1e6, size=5e5, replace=TRUE)
> system.time(z1 <- f1(A6))
user system elapsed
0.25 0.02 0.27
> system.time(z2 <- f2(A6))
user system elapsed
0.09 0.02 0.11
> identical(z1, z2)
[1] TRUE
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Bronwyn Rayfield
> Sent: Tuesday, August 28, 2012 12:59 PM
> To: r-help at r-project.org
> Subject: [R] return first index for each unique value in a vector
>
> I would like to efficiently find the first index of each unique value in a
> very large vector.
>
> For example, if I have a vector
>
> A<-c(9,2,9,5)
>
> I would like to return not only the unique values (2,5,9) but also their
> first indices (2,4,1).
>
> I tried using a for loop with which(A==unique(A)[i])[1] to find the first
> index of each unique value but it is very slow.
>
> What I am trying to do is easily and quickly done with the "unique"
> function in MATLAB (see
> http://www.mathworks.com/help/techdoc/ref/unique.html).
>
> Thank you for your help,
> Bronwyn
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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