다음과 같은 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은 다른 모든 것을 의미합니다. 따라서이 데이터에서 추적 된 6 번째 플레이는 Dario Saric (필라델피아)의 리바운드였습니다.
각 플레이어의 팀이 바닥에있는 동안 게임 수준에서 그룹화하여 리바운드 한 횟수를 찾고 싶습니다. 이를 어렵게 만드는 한 가지는 데이터 세트 전체에서 플레이어가 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 번째 플레이 예에서는 Dario Saric만이 아니라 현재 플로어에있는 5 명의 필라델피아 선수 모두에 포함되기를 원합니다.
dplyr을 사용하여이 작업을 수행하려고하지만 가능한지 확실하지 않습니다. group_by (game_id, team)을 사용하고 a1 : h5에서 % in %를 수행하려고하는데 아무것도 클릭되지 않습니다. 어떤 도움이라도 대단히 감사합니다!
사용 tidyverse
당신은 다음을 시도 할 수 있습니다. 이것은 가장 효율적인 방법이 아닐 수 있습니다.
먼저 reb == 1
리바운드 데이터에만 관심이있는 경우 필터링하고 사용 가능한 나머지 플레이는 무시합니다.
그런 다음 각 리바운드 플레이에 번호를 할당합니다.
pivot_longer
긴 형식으로 각 플레이에 대해 바닥에 플레이어 이름을 넣을 수 있습니다 . 이것은 또한 당신의 "홈"선수와 "어웨이"선수를 분리하여 같은 팀의 선수에게 점수를 줄 수 있습니다. 아마도 team
이것이 다른 연극에서 누락되었지만 사용할 수 있습니다 .
만약 당신이 group_by
game_id
홈 vs. 어웨이, 그리고 플레이 번호, 당신은 팀 동료 리바운드를 계산하여 리바운드를하는 선수가 %in%
다른 선수인지 확인할 수 있습니다 (홈 vs. 어웨이 값 공유).
그런 다음 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))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다