[R] replace id by running number

Gabor Grothendieck ggrothendieck at gmail.com
Sat Mar 27 18:03:56 CET 2010


Here is a comparison of the speed of the solutions so far plus one
based on cumsum. It seems that cumsum was the fastest and is 26x
faster than the slowest solution.

The speed may not be so important here and readability might be key in
which case a good compromise might be match which was still pretty
fast (1.6x the time of cumsum) and is very simple.

> library(rbenchmark)
> set.seed(1)
> y <- sample(10000, 10000, replace = TRUE)
> benchmark(
+ match = match(y, unique(y)),
+ cumsum = cumsum(c(FALSE, y[-1] != y[-length(y)])) + 1,
+ rle = with(rle(y), rep(seq_along(values), lengths)),
+ factor = as.numeric(factor(y, levels = unique(y)))
+ )
    test replications elapsed  relative user.self sys.self user.child sys.child
2 cumsum          100    0.21  1.000000      0.22        0         NA        NA
4 factor          100    5.50 26.190476      5.32        0         NA        NA
1  match          100    0.34  1.619048      0.33        0         NA        NA
3    rle          100    0.81  3.857143      0.81        0         NA        NA
>


On Sat, Mar 27, 2010 at 11:42 AM, sun <sun.sonny71 at googlemail.com> wrote:
> Dear all,
>
> I want to replace an (unsorted) id variable in a large dataset by a running
> number without changing the order of the cases.
>
> E.g.,
>
> y <- c(4,4,4,2,45,12,12)
>
> should be replaced by something like
>
> x <- c(1,1,1,2,3,4,4)
>
> Sorry for this simple question  & thank you very much for your help!
>
>
>
>
>
>
>        [[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