0

Thanks for the help!

I want the vector of:

s = c(2, 2, 2, 4, 4, 3, 5, 1)

to be

s = c(1, 1, 1, 2, 2, 3, 4, 5).

I am not sorting!

Kevin W
  • 71
  • 1
  • 8

3 Answers3

4

Using rleid

data.table::rleid(s)
[1] 1 1 1 2 2 3 4 5
BENY
  • 296,997
  • 19
  • 147
  • 204
4

In base R

cumsum(c(TRUE, diff(s) != 0))
#[1] 1 1 1 2 2 3 4 5
Rui Barradas
  • 57,195
  • 8
  • 29
  • 57
1

Use rle and inverse.rle from the base R.

s <- c(2, 2, 2, 4, 4, 3, 5, 1)

rl <- rle(s)
rl$values <- sort(unique(s))
s <- inverse.rle(rl)

s
# [1] 1 1 1 2 2 3 4 5
www
  • 37,164
  • 12
  • 37
  • 72