Search code examples
rseq

how do you make a sequence using along.with for unique values in r


Lets suppose I have a vector of numeric values

  [1]  2844  4936  4936  4972  5078  6684  6689  7264  7264  7880  8133  9018  9968  9968 10247
 [16] 11267 11508 11541 11607 11717 12349 12349 12364 12651 13025 13086 13257 13427 13427 13442
 [31] 13442 13442 13442 14142 14341 14429 14429 14429 14538 14872 15002 15064 15163 15163 15324
 [46] 15324 15361 15361 15400 15624 15648 15648 15648 15864 15864 15881 16332 16847 17075 17136
 [61] 17136 17196 17843 17925 17925 18217 18455 18578 18578 18742 18773 18806 19130 19195 19254
 [76] 19254 19421 19421 19429 19585 19686 19729 19729 19760 19760 19901 20530 20530 20530 20581
 [91] 20629 20629 20686 20693 20768 20902 20980 21054 21079 21156

and I want to create a sequence along this vector but for unique numbers. for example

length(unique(vector))

is 74 and there are a total of 100 values in the vector. The sequence should have numbers ranging from 1 - 74 only but with length 100 as some numbers will be repeated.

Any idea on how this can be done? Thanks.


Solution

  • Perhaps

     res <- as.numeric(factor(v1))
     head(res)
     #[1] 1 2 2 3 4 5
    

    Or

     res1 <- match(v1, unique(v1))
    

    Or

     library(fastmatch)
     res2 <- fmatch(v1, unique(v1))
    

    Or

    res3 <- findInterval(v1, unique(v1))
    

    data

    v1 <- c(2844, 4936, 4936, 4972, 5078, 6684, 6689, 7264, 7264, 7880, 
    8133, 9018, 9968, 9968, 10247, 11267, 11508, 11541, 11607, 11717, 
    12349, 12349, 12364, 12651, 13025, 13086, 13257, 13427, 13427, 
    13442, 13442, 13442, 13442, 14142, 14341, 14429, 14429, 14429, 
    14538, 14872, 15002, 15064, 15163, 15163, 15324, 15324, 15361, 
    15361, 15400, 15624, 15648, 15648, 15648, 15864, 15864, 15881, 
    16332, 16847, 17075, 17136, 17136, 17196, 17843, 17925, 17925, 
    18217, 18455, 18578, 18578, 18742, 18773, 18806, 19130, 19195, 
    19254, 19254, 19421, 19421, 19429, 19585, 19686, 19729, 19729, 
    19760, 19760, 19901, 20530, 20530, 20530, 20581, 20629, 20629, 
    20686, 20693, 20768, 20902, 20980, 21054, 21079, 21156)