1

I have my data.frame:

name  session_start
Mike  100
Mike  50
York  300
Mike  200
York  100

I need to number rows by name and ascending session_start column, like this:

name  session_start  number
Mike    50            1
Mike    100           2
Mike    200           3
York    100           1
York    300           2

P.S sorry for my english

Smasell
  • 1,206
  • 2
  • 13
  • 21
  • See this: http://stackoverflow.com/questions/12925063/numbering-rows-within-groups-in-a-data-frame . You basically just need to order first – David Arenburg Apr 12 '17 at 11:06

2 Answers2

2

We can sort df with order first and then create new column with ave:

df <- df[order(df$name, df$session_start), ]

df$number <- ave(df$session_start, df$name, FUN = rank)

# > df
#   name session_start number
# 2 Mike            50      1
# 1 Mike           100      2
# 4 Mike           200      3
# 5 York           100      1
# 3 York           300      2
mt1022
  • 16,834
  • 5
  • 48
  • 71
1

Dummy solution using data.table

library(data.table)
# Example data
d <- data.table(name = c("Mike", "Mike", "York", "Mike", "York"),
                session_start = c(100, 50, 300, 200, 100))
# Solution
d[, number := order(session_start), name]
pogibas
  • 27,303
  • 19
  • 84
  • 117