dplyr跨r中的多个列分组?

dplyr跨r中的多个列分组?,r,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

有一些像这样的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是在该行中进行相关游戏的玩家的名称

团队是在该行中进行相关游戏的玩家的团队

reb是一个二进制文件,1表示反弹,0表示其他所有内容。因此,数据中追踪到的第六场比赛是费城达里奥·萨里奇的反弹

我想找出每个球员在球场上的篮板数量,按比赛级别分组。使这一点变得困难的一点是,在整个数据集中,玩家将在a1:h5中移动,即在第一个游戏中,Dario Saric随后被列在a4和a5下。所以,当一名球员在球场上时,他们被列入a1-h5阵容基本上是随机的,除了客队都是a1:5,主队是h1:5

以下是我过去在每场比赛中发现的球员篮板:

library(dplyr)
rebs %>%
group_by(game_id, player) %>%
summarize(rebs = sum(reb))
我不确定如何找到一支球队在每个球员在场上时的篮板数量。在第六场比赛的例子中,我想把这算在目前在场的所有5名费城球员中,而不仅仅是达里奥·萨里奇

正在尝试使用dplyr来完成此操作,但不确定是否可行。我试着使用群组游戏id,团队,然后在a1:h5上做一个%in%,但是没有点击。非常感谢您的帮助

使用tidyverse,您可以尝试以下方法。这可能不是最有效的方法

如果只对反弹数据感兴趣,第一个将过滤reb==1,并忽略其余可用的重头戏

然后为每个篮板球分配一个号码

你可以把你的球员名字放在长格式的每一场比赛的地板上。这也会将你的主场球员和客场球员分开,因此你可以为同一队的球员评分。也许你们可以使用团队,尽管这在其他比赛中是缺失的

如果您根据比赛id、主客场以及比赛编号对比赛进行分组,您可以计算队友的篮板数,检查篮板的球员是否为其他球员的%(其他球员共享主客场值)

然后你可以按每个队员分组,并计算这些篮板的总数

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))
使用tidyverse,您可以尝试以下方法。这可能不是最有效的方法

如果只对反弹数据感兴趣,第一个将过滤reb==1,并忽略其余可用的重头戏

然后为每个篮板球分配一个号码

你可以把你的球员名字放在长格式的每一场比赛的地板上。这也会将你的主场球员和客场球员分开,因此你可以为同一队的球员评分。也许你们可以使用团队,尽管这在其他比赛中是缺失的

如果您根据比赛id、主客场以及比赛编号对比赛进行分组,您可以计算队友的篮板数,检查篮板的球员是否为其他球员的%(其他球员共享主客场值)

然后你可以按每个队员分组,并计算这些篮板的总数

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))

您还可以添加来自dputheadrebs的输出吗?目前,复制和使用数据嵌入空间需要做更多的工作,这有时会让复制和使用变得有点困难。您还可以添加dputheadrebs的输出吗?目前,复制和使用数据嵌入空间需要更多的工作,有时会有点困难。这需要一段时间来运行“队友”\u reb line需要很长时间,可能b/c pivot\u后的行数超过1m,但这给了我想要的,我真的很感激你一步一步地将其分解!这花了一段时间来运行队友线需要很长时间,很可能b/c在pivot__后的行数超过1米,但这给了我想要的,我真的很感激你一步一步地将其分解!谢谢