0

I have example data as follows:

avec <- c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 
28L, 29L, 30L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 
31L, 31L, 31L, 44L, 44L, 44L, 47L, 47L, 47L, 47L, 51L, 51L, 51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 52L, 
52L, 52L, 52L, 52L, 52L, 52L)

avec 
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 31 31 31 31 31 31 31 31 31 31 31 31 44 44
[46] 44 47 47 47 47 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 52 52 52 52 52 52 52

I have a vector avec, which has a couple of numbers (31, 44, 47, 51, 52) that occur more than once:

table(avec)

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 44 47 51 52 
 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 13  3  4 15  7 

When this happens, the vector skips the next number (for example 32 up to 43 are missing).

I would like to change the sequence so that it does not skip any numbers.

Desired output:

avec <- c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 
28L, 29L, 30L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 
31L, 31L, 31L, 32L, 32L, 32L, 33L, 33L, 33L, 33L, 34L, 34L, 34L, 
34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 34L, 35L, 
35L, 35L, 35L, 35L, 35L, 35L)

What would be the easiest way to do this?

Tom
  • 2,173
  • 1
  • 17
  • 44

1 Answers1

3

Base R:

match(avec, unique(avec))

 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 33 33
[49] 33 33 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35


as.integer(factor(avec))

 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 33 33
[49] 33 33 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35

with(rle(avec), rep(seq_along(values), lengths))

 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 33 33
[49] 33 33 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35

Tidyverse:

dplyr::dense_rank(avec)

 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[25] 25 26 27 28 29 30 31 31 31 31 31 31 31 31 31 31 31 31 31 32 32 32 33 33
[49] 33 33 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 35 35 35 35 35 35 35
Onyambu
  • 67,392
  • 3
  • 24
  • 53