1

This is a small rep of the df:

Name <- rep(c("Kobe Bryant", "Julius Randle", "Robert Sacre" ,"Lebron James", "Kevin Love"),c(2,2,2,4,5))

Team <- rep(c("Los Angeles Lakers", "Cleveland Cavaliers"),c(6,9))

Date <- as.Date(c("2015-05-14", "2015-05-15", "2015-05-14","2015-05-18","2015-05-14", "2015-05-20", "2015-05-14","2015-05-16","2015-05-21", "2015-05-22", "2015-05-14","2015-05-16","2015-05-17","2015-06-21","2015-06-22"))

dd <- data.frame(Name,Team,Date)

I would like to create a new variable/column that for each team, ranks the different games in terms of date from oldest to most recent game.

The output would look like this:

        Name                Team       Date desired_output
1    Kobe Bryant  Los Angeles Lakers 2015-05-14              1
2    Kobe Bryant  Los Angeles Lakers 2015-05-15              2
3  Julius Randle  Los Angeles Lakers 2015-05-14              1
4  Julius Randle  Los Angeles Lakers 2015-05-18              3
5   Robert Sacre  Los Angeles Lakers 2015-05-14              1
6   Robert Sacre  Los Angeles Lakers 2015-05-20              4
7   Lebron James Cleveland Cavaliers 2015-05-14              1
8   Lebron James Cleveland Cavaliers 2015-05-16              2
9   Lebron James Cleveland Cavaliers 2015-05-21              4
10  Lebron James Cleveland Cavaliers 2015-05-22              5
11    Kevin Love Cleveland Cavaliers 2015-05-14              1
12    Kevin Love Cleveland Cavaliers 2015-05-16              2
13    Kevin Love Cleveland Cavaliers 2015-05-17              3
14    Kevin Love Cleveland Cavaliers 2015-06-21              4
15    Kevin Love Cleveland Cavaliers 2015-06-22              5

I thought of split - apply - combine with a ranking function but I couldn't make it work.

Sburg13
  • 121
  • 5
  • Please also share your attempts with `split`, `apply` and `combine`. –  Aug 12 '15 at 02:13

1 Answers1

3

We can use dense_rank from dplyr to do this:

library(dplyr)
dd %>% group_by(Team) %>%
       mutate(rank = dense_rank(Date))

            Name                Team       Date rank
1    Kobe Bryant  Los Angeles Lakers 2015-05-14    1
2    Kobe Bryant  Los Angeles Lakers 2015-05-15    2
3  Julius Randle  Los Angeles Lakers 2015-05-14    1
4  Julius Randle  Los Angeles Lakers 2015-05-18    3
5   Robert Sacre  Los Angeles Lakers 2015-05-14    1
6   Robert Sacre  Los Angeles Lakers 2015-05-20    4
7   Lebron James Cleveland Cavaliers 2015-05-14    1
8   Lebron James Cleveland Cavaliers 2015-05-16    2
9   Lebron James Cleveland Cavaliers 2015-05-21    4
10  Lebron James Cleveland Cavaliers 2015-05-22    5
11    Kevin Love Cleveland Cavaliers 2015-05-14    1
12    Kevin Love Cleveland Cavaliers 2015-05-16    2
13    Kevin Love Cleveland Cavaliers 2015-05-17    3
14    Kevin Love Cleveland Cavaliers 2015-06-21    6
15    Kevin Love Cleveland Cavaliers 2015-06-22    7
jeremycg
  • 24,657
  • 5
  • 63
  • 74