计算group_by中行之间的差异分数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算group_by中行之间的差异分数相关的知识,希望对你有一定的参考价值。
我正在处理一些比赛数据,并希望计算出每场比赛每支球队之间的目标差异。
我可以得到第二支球队的得分差异(在差异栏中),但我无法弄清楚如何计算第一支球队的球门差异。它应该是第二个团队的目标差异的倒数(即在样本数据集中,“Growlers”应该在diff列中具有1
并且“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
由reprex package创建于2019-02-26(v0.2.0)。
答案
快速而肮脏的方法是明确计算团队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
以上是关于计算group_by中行之间的差异分数的主要内容,如果未能解决你的问题,请参考以下文章
Joda DateTime 到 BigDecimal 分数计算
使用距离矩阵计算 Pandas Dataframe 中行之间的距离