繁体   English   中英

dplyr 在 r 中跨多个列分组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM