Search code examples
rdplyrseqrep

How to enumerate groups in R?


Which native R function or which function in any other library would I be able to make a column listed with the one in the image below?

enter image description here

Dataset

lines = "Group
C
C
C
B
B
A
A
A
A
A
A
D
D
D
D
"

dataset = read.table(textConnection(lines), sep=";", h=T)

Solution

  • Try with cur_group_id() from dplyr:

    library(dplyr)
    #Code 1
    newdf <- dataset%>% 
      mutate(Group=factor(Group,levels = unique(Group),ordered = T)) %>%
      group_by(Group) %>% mutate(Num=cur_group_id())
    

    Output:

    # A tibble: 15 x 2
    # Groups:   Group [4]
       Group   Num
       <ord> <int>
     1 C         1
     2 C         1
     3 C         1
     4 B         2
     5 B         2
     6 A         3
     7 A         3
     8 A         3
     9 A         3
    10 A         3
    11 A         3
    12 D         4
    13 D         4
    14 D         4
    15 D         4
    

    Or using base R:

    #Code 2
    dataset$Num <- as.integer(factor(dataset$Group,levels = unique(dataset$Group)))
    

    Output:

       Group Num
    1      C   1
    2      C   1
    3      C   1
    4      B   2
    5      B   2
    6      A   3
    7      A   3
    8      A   3
    9      A   3
    10     A   3
    11     A   3
    12     D   4
    13     D   4
    14     D   4
    15     D   4