Adding an repeated index for factors in data frame

前端 未结 4 810
慢半拍i
慢半拍i 2020-12-03 20:27

I have a data frame in which I want to add an index e.g. 1...n for each factor in my data frame. Here is an example with some dummy data.

factor
a        
a          


        
4条回答
  •  情话喂你
    2020-12-03 20:56

    Try the following function:

     facSeq <- function(x){
         x.l <-length(x)
         x.f.l <- length(levels(x))
         sapply(1:x.f.l,function(y) cumsum(as.integer(x)%in%y))[1:x.l+x.l*(as.integer(x)-1)]
     }
    

    Testing:

    fac1 <- factor(rep(letters[1:3],each=5))
    
    > data.frame(fac1,index=facSeq(fac1))
       fac1 index
    1     a     1
    2     a     2
    3     a     3
    4     a     4
    5     a     5
    6     b     1
    7     b     2
    8     b     3
    9     b     4
    10    b     5
    11    c     1
    12    c     2
    13    c     3
    14    c     4
    15    c     5
    

    More interesting example:

    fac2 <- factor(sample(letters[1:5],20,replace=T))
    
    > data.frame(fac2,index=facSeq(fac2))
       fac2 index
    1     a     1
    2     a     2
    3     d     1
    4     b     1
    5     a     3
    6     e     1
    7     e     2
    8     a     4
    9     c     1
    10    e     3
    11    b     2
    12    d     2
    13    b     3
    14    e     4
    15    e     5
    16    d     3
    17    c     2
    18    e     6
    19    b     4
    20    d     4
    

提交回复
热议问题