R: Разделить - Применить - Объединить, чтобы получить кумулятивную переменную
Это небольшой повтор дф:
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
Я думал о разделении - применении - объединении с функцией ранжирования, но я не мог заставить ее работать.
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