get_player <- function(rcg, name) { output <- rcg |> dplyr::inner_join(name, by = "side") |> dplyr::filter(is.na(stime)) |> dplyr::select( step, team = name, unum, px = x, py = y, pvx = vx, pvy = vy, body, neck, ) return(output) } get_action <- function(rcl, ball, players) { output <- rcl |> dplyr::filter(command == "kick" | command == "tackle") |> dplyr::mutate( x = args |> stringr::str_extract("[0-9\\-\\.]+"), l1 = args |> stringr::str_remove(x), y = l1 |> stringr::str_extract("[0-9\\-\\.]+"), unum = as.numeric(unum) ) |> dplyr::select( step, team, unum, command, ax = x, ay = y, ) |> dplyr::inner_join(ball, by = "step") %>% dplyr::inner_join(players, by = c("step", "team", "unum")) %>% dplyr::mutate(after_team = lead(team)) %>% dplyr::mutate(a_sameteam = (after_team == team)) %>% dplyr::mutate(tackle_scc = (command == "tackle" & a_sameteam)) %>% dplyr::mutate(a_tackle_scc = lead(tackle_scc)) %>% dplyr::select(-c(after_team, a_sameteam)) return(output) } get_tackle <- function(action) { output <- action %>% dplyr::filter(command == "tackle") %>% dplyr::select(-c(a_tackle_scc, ax, ay)) return(output) } # get_kick <- function(action) { # output <- action %>% # dplyr::filter(command == "kick") %>% # dplyr::mutate(before_team = lag(team)) %>% # dplyr::mutate(before_unum = lag(unum)) %>% # dplyr::mutate(after_team = lead(team)) %>% # dplyr::mutate(after_unum = lead(unum)) %>% # dplyr::mutate(b_sameteam = (before_team == team)) %>% # dplyr::mutate(b_sameunum = (before_unum == unum)) %>% # dplyr::mutate(a_sameteam = (after_team == team)) %>% # dplyr::mutate(a_sameunum = (after_unum == unum)) # output$b_sameteam[1] <- TRUE # output$b_sameunum[1] <- FALSE # output <- output %>% # dplyr::mutate(dribble = (a_sameteam & a_sameunum)) %>% # dplyr::mutate(pass = (a_sameteam & !a_sameunum)) %>% # group_by(grc = cumsum(!dribble)) %>% # mutate(touch = row_number()) %>% # ungroup() %>% # select(-c(tackle_scc, grc, before_team, before_unum, b_sameteam, b_sameunum, after_team, after_unum, a_sameteam, a_sameunum)) # return(output) # } get_kick <- function(action) { output <- action %>% dplyr::filter(command == "kick") %>% dplyr::mutate(after_team = lead(team)) %>% dplyr::mutate(after_unum = lead(unum)) %>% dplyr::mutate(a_sameteam = (after_team == team)) %>% dplyr::mutate(a_sameunum = (after_unum == unum)) %>% select(-c(command, ax, ay, ball_vx, ball_vy, pvx, pvy, body, neck)) return(output) } get_pass <- function(kick) { output <- kick %>% dplyr::mutate(pass_scc = (a_sameteam & !a_sameunum)) %>% dplyr::mutate(pass = ((a_sameteam & !a_sameunum) | (!a_tackle_scc & !a_sameteam))) %>% dplyr::filter(pass) %>% select(-c(a_tackle_scc,tackle_scc, pass, a_sameteam, a_sameunum, after_team, after_unum)) return(output) } get_dribble <- function(kick) { output <- kick %>% dplyr::mutate(dribble = ((!a_sameteam & a_tackle_scc) | (a_sameteam & a_sameunum))) %>% dplyr::mutate(dribble_scc = (a_sameteam & a_sameunum)) %>% group_by(grc = cumsum(!dribble)) %>% mutate(touch = row_number()) %>% ungroup() %>% dplyr::filter(dribble) %>% select(-c(a_tackle_scc,tackle_scc, dribble, a_sameteam, a_sameunum, after_team, after_unum, dribble, grc)) return(output) } read_referee <- function(path_rcl) { referee <- path_rcl |> readr::read_lines() |> tibble::as_tibble() |> dplyr::mutate( step = value |> stringr::str_extract("\\d+"), command = value |> stringr::str_extract("referee [a-zA-Z0-9_]*") |> stringr::str_remove("referee "), step = as.numeric(step), ) |> dplyr::select( step, command, ) %>% tidyr::drop_na() return(referee) } read_goal <- function(referee, name) { goal <- referee |> dplyr::filter(stringr::str_detect(command, "goal_[rl]_[0-9]+")) |> dplyr::mutate( side = command |> stringr::str_remove("goal_") |> stringr::str_extract("[rl]"), score = command |> stringr::str_remove("goal_[rl]_") |> stringr::str_extract("[0-9]+"), ) |> dplyr::inner_join(name, by = "side") |> dplyr::select( step, side, name, score, ) %>% tidyr::drop_na() return(goal) } before_goal <- function(kick_log, goal_step, goal_team) { playlist <- kick_log %>% dplyr::arrange(desc(step)) %>% dplyr::filter( step > goal_step - 100, step < goal_step, team == goal_team, ) } get_goal_playlist <- function(kick_log, goal) { if (length(goal$step) < 1) { return(NA) } i <- 1 output <- before_goal(kick_log, goal$step[i], goal$name[i]) i <- i + 1 while (i <= length(goal$step)) { # print(i) i_list <- before_goal(kick_log, goal$step[i], goal$name[i]) output <- output |> bind_rows(i_list) i <- i + 1 } # for(i in goal$step){ # i_list <- before_goal(kick_log,goal$step[i],goal$name[i]) # output <- output |> bind_rows(i_list) # print(i) # } return(output) } convert_by_step <- function(rcg, rcl) { output <- dplyr::inner_join(rcg, rcl, by = "step") return(output) } get_dribble_point <- function(log_data) { output <- log_data %>% filter(dribble == TRUE, pass == FALSE) return(output) } get_pass_point <- function(log_data) { output <- log_data %>% filter(pass == TRUE) return(output) } get_tackle_point <- function(log_data) { output <- log_data %>% filter(tackle == TRUE) return(output) } get_rcl <- function(path_rcl) { output <- path_rcl |> read_rcl() return(output) } get_name <- function(path_rcg) { team_name <- path_rcg |> stringr::str_extract("[a-zA-Z0-9_-]*.rcg") |> stringr::str_remove("[0-9]*-") |> stringr::str_remove(".rcl") l_team <- team_name |> stringr::str_extract("[a-zA-Z0-9_]*-vs-") |> stringr::str_remove("_[0-9]*-vs-") r_team <- path_rcg |> stringr::str_extract("[a-zA-Z0-9_]*.rcg") |> stringr::str_remove("_[0-9]*.rcg") name_table <- tibble::tribble( ~side, ~name, "l", l_team, "r", r_team, ) return(name_table) } replase_rcg_to_rcl <- function(path_rcg) { output <- path_rcg |> stringr::str_replace(pattern = ".rcg", replacement = ".rcl") } replase_rcl_to_rcg <- function(path_rcl) { output <- path_rcl |> stringr::str_replace(pattern = ".rcl", replacement = ".rcg") } kick_dist <- function(rcg) { ball_path <- rcg |> dplyr::group_nest(step, ball_x, ball_y) |> dplyr::mutate( move_dist_x = ball_x - dplyr::lag(ball_x), move_dist_y = ball_y - dplyr::lag(ball_y), move_dist = sqrt(move_dist_x^2 + move_dist_y^2), move_dist = dplyr::if_else(is.na(move_dist), 0, move_dist) ) |> dplyr::filter(move_dist != 0 & move_dist < 40) }