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
  • 91
  • 2
  • 9

3 Answers3

4

Using rleid

data.table::rleid(s)
[1] 1 1 1 2 2 3 4 5
BENY
  • 317,841
  • 20
  • 164
  • 234
4

In base R

cumsum(c(TRUE, diff(s) != 0))
#[1] 1 1 1 2 2 3 4 5
Rui Barradas
  • 70,273
  • 8
  • 34
  • 66
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
  • 38,575
  • 12
  • 48
  • 84