Search code examples
rvectoruniqueindexof

R: how to find index of all repetition vector values order by unique vector without using loop?


I have a vector of integers like this:

a <- c(2,3,4,1,2,1,3,5,6,3,2)
values<-c(1,2,3,4,5,6)

I want to list, for every unique value in my vector (the unique values being ordered), the position of their occurences. My desired output:

rep_indx<-data.frame(c(4,6),c(1,5,11),c(2,7,10),c(3),c(8),c(9))

Solution

  • split fits pretty well here, which returns a list of indexes for each unique value in a:

    indList <- split(seq_along(a), a)
    indList
    # $`1`
    # [1] 4 6
    # 
    # $`2`
    # [1]  1  5 11
    # 
    # $`3`
    # [1]  2  7 10
    # 
    # $`4`
    # [1] 3
    # 
    # $`5`
    # [1] 8
    # 
    # $`6`
    # [1] 9
    

    And you can access the index by passing the value as a character, i.e.:

    indList[["1"]]
    # [1] 4 6