[英]dplyr grouping across multiple columns in r?
有一些看起来像这样的NBA数据 -
>head(rebs)
game_id a1 a2 a3 a4 a5 h1 h2 h3 h4
1 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
2 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
3 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
4 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
5 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
6 21800001 Dario Saric Robert Covington Joel Embiid Markelle Fultz Ben Simmons Jayson Tatum Gordon Hayward Al Horford Jaylen Brown
h5 player team event_type type reb
1 Kyrie Irving start of period start of period 0
2 Kyrie Irving Al Horford PHI jump ball jump ball 0
3 Kyrie Irving Robert Covington PHI miss Jump Shot 0
4 Kyrie Irving rebound team rebound 0
5 Kyrie Irving Jayson Tatum BOS miss Jump Shot 0
6 Kyrie Irving Dario Saric PHI rebound rebound defensive 1
game_id 是正在玩的游戏的 id。 有一个完整的赛季数据,所以这组有很多不同的游戏。
这是NBA关于比赛级别的数据。 a1:a5 是目前在场的客队球员,h1:h5 是目前在场的主队球员。
player 是在该行中进行相关比赛的球员的姓名
team 是进行该行中描述的相关比赛的球员所在的球队
reb 是二进制数,1 表示反弹,0 表示其他所有值。 因此,该数据跟踪的第 6 场比赛是达里奥·萨里奇(费城)的反弹。
我想找出每个球员在场时的篮板数,按比赛级别分组。 让这变得困难的一件事是,在整个数据集中,玩家将在整个 a1:h5 中移动,即在第一场比赛中,Dario Saric 后来被列在 a4 和 a5 下。 所以,基本上是随机的,球员在场上时会被列在 a1-h5 阵容中(除了客队都是 a1:5,主队是 h1:5)。
以下是我过去按每场比赛分组的球员篮板:
library(dplyr)
rebs %>%
group_by(game_id, player) %>%
summarize(rebs = sum(reb))
不过,我不确定如何计算每个球员在场时球队的篮板数。 例如。 在第 6 场比赛示例中,我希望将其计入目前在场的所有 5 名费城球员,而不仅仅是达里奥·萨里奇。
尝试使用 dplyr 来执行此操作,但不确定是否可行。 我正在尝试使用 group_by(game_id, team),然后在 a1:h5 上执行 %in%,但没有任何点击。 非常感谢任何帮助!
使用tidyverse
您可以尝试以下操作。 这可能不是最有效的方法。
如果只想查看反弹数据,首先将过滤reb == 1
,并忽略可用播放的 rest。
然后将为每个篮板球分配一个编号。
您可以pivot_longer
将您的球员姓名放在场上,以便为每场比赛以长格式显示。 这也会将您的“主场”与“客场”球员分开,因此您可以将功劳归于同一支球队的球员。 也许您可以使用team
,尽管其他游戏缺少此功能。
如果你group_by
game_id
,主客场和比赛次数,你可以统计队友的篮板,检查篮板的球员是否是其他球员的%in%
(共享主客场值)。
然后你可以group_by
每个队员分组并对这些篮板求和。
library(tidyverse)
rebs %>%
filter(reb == 1) %>%
mutate(play_number = row_number()) %>%
pivot_longer(a1:h5, names_to = c("home_away", "num"), values_to = "team_player", names_pattern = "(a|h)(\\d)") %>%
group_by(game_id, home_away, play_number) %>%
mutate(teammate_reb = ifelse(player %in% team_player, 1, 0)) %>%
group_by(game_id, team_player) %>%
summarise(reb_total = sum(teammate_reb))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.