【问题标题】:Calculate differences scores between rows in a group_by计算 group_by 中行之间的差异分数
【发布时间】:2019-02-26 15:38:24
【问题描述】:

我正在处理一些比赛数据,并想计算出每场比赛每支球队的进球数差异。

我可以得到第二队的分差(在 diff 列中),但我不知道如何计算第一队的净胜球。它应该是第二支球队的目标差的倒数(即在样本数据集中,“咆哮者”应该在差异列中有1,而“罢工”应该有-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

由reprex package (v0.2.0) 于 2019 年 2 月 26 日创建。

【问题讨论】:

    标签: r dplyr difference


    【解决方案1】:

    一种快速而肮脏的方法是明确计算团队 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2022-12-09
      • 1970-01-01
      相关资源
      最近更新 更多