R: Разделить - Применить - Объединить, чтобы получить кумулятивную переменную

Это небольшой представитель 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)

Я хотел бы создать новую переменную/столбец, который для каждой команды ранжирует разные игры по дате от самой старой до самой последней игры.

Вывод будет выглядеть следующим образом:

        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

Я думал о разделении-применении-объединении с функцией ранжирования, но я не мог заставить его работать.


person Sburg13    schedule 12.08.2015    source источник
comment
Также поделитесь своими попытками с split, apply и combine.   -  person    schedule 12.08.2015


Ответы (1)


Мы можем использовать dense_rank из dplyr для этого:

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
person jeremycg    schedule 12.08.2015