Рассчитать оценки различий между строками в group_by - PullRequest
0 голосов
/ 26 февраля 2019

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

Я могу получить разницу очков для второй команды (в столбце diff), но не могу понять, как рассчитать разницу мячей для команды first .Это должно быть обратно пропорционально разнице мячей для второй команды (т. Е. В примере набора данных «Growlers» должен иметь 1 в столбце diff, а «Strike» должен иметь -1).

library(dplyr)

dat <-
  structure(
    list(
      Match = c(1, 1, 2, 2, 3, 3),
      Team = c("Growlers",
               "Rollers", "Strike", "Bandits", "Cats", "Blues"),
      Goals = c(1,0, 0, 1, 1, 2)
    ),
    row.names = c(NA,-6L),
    groups = structure(
      list(
        Match = c(895825, 895826, 895827),
        .rows = list(1:2, 3:4,
                     5:6)
      ),
      row.names = c(NA,-3L),
      class = c("tbl_df", "tbl",
                "data.frame"),
      .drop = TRUE
    ),
    class = c("grouped_df", "tbl_df",
              "tbl", "data.frame")
  )

dat %>% 
    group_by(Match) %>% 
    mutate(diff = Goals - lag(Goals))
#> # A tibble: 6 x 4
#> # Groups:   Match [3]
#>   Match Team     Goals  diff
#>   <dbl> <chr>    <dbl> <dbl>
#> 1     1 Growlers     1    NA
#> 2     1 Rollers      0    -1
#> 3     2 Strike       0    NA
#> 4     2 Bandits      1     1
#> 5     3 Cats         1    NA
#> 6     3 Blues        2     1

Создано в 2019-02-26 с помощью пакета prex (v0.2.0).

1 Ответ

0 голосов
/ 26 февраля 2019

Быстрый и грязный способ - явно рассчитать счет для команды 1 и команды 2 следующим образом:

dat %>% 
  group_by(Match) %>% 
  mutate(
    diff = c(
      Goals[1] - Goals[2],
      Goals[2] - Goals[1] 
    )
  )

#> # A tibble: 6 x 4
#> # Groups:   Match [3]
#>   Match Team     Goals  diff
#>   <dbl> <chr>    <dbl> <dbl>
#> 1     1 Growlers     1     1
#> 2     1 Rollers      0    -1
#> 3     2 Strike       0    -1
#> 4     2 Bandits      1     1
...