0

My data looks like below:

dat <- structure(list(col1 = c("a1", "a1", "a1", "a1", "a1", "a1", "a2", "a2", "a2", "a2", "a2", "a2", "a2", "a2", "a2", "a2"),  
                    col2= c("te", "te", "au", "au", "sb", "sb", "te", "te", "te", "te", "te", "au", "au", "sb", "sb", "sb"), 
                    col3 = c("ad", "ak", "ap", "tp", "ad", "cd", "mk", "ml", "an", "ad", "ak", "ap", "kk", "jj", "cd", "cp")),
               .Names = c("col1", "col2", "col3"), row.names = c(NA, -16L), class = "data.frame")
dat
   col1 col2 col3
1    a1   te   ad
2    a1   te   ak
3    a1   au   ap
4    a1   au   tp
5    a1   sb   ad
6    a1   sb   cd
7    a2   te   mk
8    a2   te   ml
9    a2   te   an
10   a2   te   ad
11   a2   te   ak
12   a2   au   ap
13   a2   au   kk
14   a2   sb   jj
15   a2   sb   cd
16   a2   sb   cp

I need to provide row index number based on unique column entries. For example, row1 and row2 has unique values in col1 and col2. Values in col3 varies for these two rows. I want to put 1, and 2 as index number for these two rows. The output will be like this:

   col1 col2 col3 rowind
1    a1   te   ad      1
2    a1   te   ak      2
3    a1   au   ap      1
4    a1   au   tp      2
5    a1   sb   ad      1
6    a1   sb   cd      2
7    a2   te   mk      1
8    a2   te   ml      2
9    a2   te   an      3
10   a2   te   ad      4
11   a2   te   ak      5
12   a2   au   ap      1
13   a2   au   kk      2
14   a2   sb   jj      1
15   a2   sb   cd      2
16   a2   sb   cp      3

I am trying to use match functions. However, still not working.

S Das
  • 3,291
  • 6
  • 26
  • 41
  • 2
    Assuming your second column is called `col2`, using `dplyr`, you can do `dat %>% group_by(col1, col2) %>% mutate(rowind = row_number())` Or `dat$rowind <- with(dat, ave(seq_along(col1), col1, col2, FUN = seq_along))` in base R. – Ronak Shah Mar 06 '20 at 00:26
  • Yes, it answers my question. – S Das Mar 06 '20 at 00:30

0 Answers0