Сортировка фрейма данных и создание нового столбца, который показывает последовательные выигрыши и проигрыши по идентификатору - PullRequest
0 голосов
/ 15 мая 2018

Мои данные имеют 65 столбцов, но я хочу отсортировать фрейм данных на основе team_id, а затем мне нужно рассчитать количество последовательных побед или поражений из столбца team_outcome на основе team_id.

Например, команда с 3 победами подряд показала бы 1,2,3 вниз по столбцу. Если команда затем проиграет 3 партии подряд, следующие 3 строки будут -1, -2, -3 и т. Д. Как я могу это сделать? Это мои данные:

>team_id<-c("Minnesota", "Dallas", "Minnesota", "Chicago", "Brooklyn", "Cleveland", "Washington","Minnesota", "Dallas")
>team_outcome<-c("win","loss","loss","win","win","loss","win","loss","win")

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете сначала создать функцию, которая возвращает 1,2,3 ... или -1, -2, -3 ... в зависимости от полосы:

calc_streak <- function (x) {
    if (all(x)) return (1:length(x))
    if (all(!x)) return (-1:-length(x))
    breaks <- which(x[-1]!=x[-length(x)])+1
    streaks <- split(x, findInterval(1:length(x), breaks)) # split outcomes into streaks
    unlist(lapply(streaks, calc_streak))
}

Наконец, вы можете применитьфункция для разных команд в ваших данных:

library(dplyr); library(magrittr)
df <- group_by(df, team_id) %>% 
          do(data.frame(., streak=calc_streak(.$team_outcome=="win")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...