Is there a dplyr equivalent to data.table::rleid?

前端 未结 4 1623
灰色年华
灰色年华 2020-11-22 13:16

data.table offers a nice convenience function, rleid for run-length encoding:

library(data.table)
DT = data.table(grp=rep(c(\"A\", \"B\", \"C\",         


        
4条回答
  •  无人及你
    2020-11-22 13:55

    You can just do (when you have both data.table and dplyr loaded):

    DT <- DT %>% mutate(rlid = rleid(grp))
    

    this gives:

    > DT
        grp value rlid
     1:   A     1    1
     2:   A     2    1
     3:   B     3    2
     4:   B     4    2
     5:   C     5    3
     6:   C     6    3
     7:   C     7    3
     8:   A     8    4
     9:   B     9    5
    10:   B    10    5
    

    When you don't want to load data.table separately you can also use (as mentioned by @DavidArenburg in the comments):

    DT <- DT %>% mutate(rlid = data.table::rleid(grp))
    

    And as @RichardScriven said in his comment you can just copy/steal it:

    myrleid <- data.table::rleid
    

提交回复
热议问题