Присвоить номера элементам data.frame в соответствии с порядком их появления в группе - PullRequest
1 голос
/ 03 июля 2019

У меня есть набор данных с данными по крикету за мячом, который упорядочен по последовательности событий в матче (т. Е. «За» в кадре данных).Я хотел бы добавить столбец, назначающий позицию ватина (1,2,3, ...) каждому игроку с битой в пределах batting_team и match_id.Одновременно есть два игрока с битой - они могут летучие мыши, кто-то другой - летучие мыши, и они возвращаются.

Я пробовал такие вещи, как tally (), но это не совсем то, что я хочу, и я подозреваю, что может быть потенциальное решение с использованием факторов, но я не знаю, как это сделать по группам.

Вот пример фрейма данных:

mydata <- data.frame(batting_team=c(rep("South Africa",6),rep("England",6)),
                     match_id=c(rep(343434,6),rep(353535,6)),
                     over=rep(seq(0.1,0.6,0.1),2),
                     batsman=c("HM Amla","HM Amla","GC Smith","HM Amla","JH Kallis","JH Kallis",
                               "JJ Roy","JJ Roy","JJ Roy","JM Bairstow","JM Bairstow","JJ Roy"))

Вот мой желаемый результат:

   batting_team match_id over     batsman batting_order
1  South Africa   343434  0.1     HM Amla             1
2  South Africa   343434  0.2     HM Amla             1
3  South Africa   343434  0.3    GC Smith             2
4  South Africa   343434  0.4     HM Amla             1
5  South Africa   343434  0.5   JH Kallis             3
6  South Africa   343434  0.6   JH Kallis             3
7       England   353535  0.1      JJ Roy             1
8       England   353535  0.2      JJ Roy             1
9       England   353535  0.3      JJ Roy             1
10      England   353535  0.4 JM Bairstow             2
11      England   353535  0.5 JM Bairstow             2
12      England   353535  0.6      JJ Roy             1

1 Ответ

2 голосов
/ 03 июля 2019

Можно было бы сгруппировать по 'batting_team' и сделать match с unique 'batsman' с 'batsman', чтобы получить индекс

library(dplyr)
mydata %>%
   group_by(batting_team) %>% 
   mutate(batting_order = match(batsman, unique(batsman)))
# A tibble: 12 x 5
# Groups:   batting_team [2]
#   batting_team match_id  over batsman     batting_order
#   <fct>           <dbl> <dbl> <fct>               <int>
# 1 South Africa   343434   0.1 HM Amla                 1
# 2 South Africa   343434   0.2 HM Amla                 1
# 3 South Africa   343434   0.3 GC Smith                2
# 4 South Africa   343434   0.4 HM Amla                 1
# 5 South Africa   343434   0.5 JH Kallis               3
# 6 South Africa   343434   0.6 JH Kallis               3
# 7 England        353535   0.1 JJ Roy                  1
# 8 England        353535   0.2 JJ Roy                  1
# 9 England        353535   0.3 JJ Roy                  1
#10 England        353535   0.4 JM Bairstow             2
#11 England        353535   0.5 JM Bairstow             2
#12 England        353535   0.6 JJ Roy                  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...