chess_data <- read_lines("chess_data.txt")
hlines <- str_which(chess_data, "^\\-+$")
player_dfs <- tibble()
matches_dfs <- tibble()
for (i in hlines[2:(length(hlines) - 1)]) {
  line_1 <- str_trim(chess_data[i + 1]) %>%
    str_squish() %>%
    str_split_1("\\|")
  
  line_2 <- str_trim(chess_data[i + 2]) %>%
    str_squish() %>%
    str_split_1("\\|")
  
  player_number <- str_extract(line_1[1], "\\d+")
  player_name <- str_trim(line_1[2])
  total_points <- parse_number(line_1[3]) %>% format(., nsmall = 1)
  opponent_numbers <- str_extract(line_1[4:10], "\\d+")
  player_state <- str_trim(line_2[1])
  player_pre_rating <- str_extract(line_2[2], "(?<=R\\:\\s)\\d{1,4}")
  
  player_df <- tibble(
    player_number = player_number,
    player_name = player_name,
    total_points = total_points,
    state = player_state,
    pre_rating = player_pre_rating
  )
  
  match_df <- tibble(
    player_number = rep(player_number, length(opponent_numbers)),
    round = 1:length(opponent_numbers),
    opponent_number = opponent_numbers
  )
  
  player_dfs <- bind_rows(player_dfs, player_df)
  matches_dfs <- bind_rows(matches_dfs, match_df)
}
avg_opp_pre_ratings <- matches_dfs %>%
  left_join(
    select(player_dfs, player_number, opponent_pre_rating = "pre_rating"),
    by = c("opponent_number" = "player_number")
  ) %>%
  mutate(opponent_pre_rating = as.numeric(opponent_pre_rating)) %>%
  group_by(player_number) %>%
  summarise(
    mean_opp_pre_rating = round(mean(opponent_pre_rating, na.rm = TRUE), 2),
    .groups = "drop"
  )
chess_df <- left_join(player_dfs, avg_opp_pre_ratings, by = "player_number")
write_csv(chess_df, "Project_1_chess.csv")
head(chess_df)
## # A tibble: 6 × 6
##   player_number player_name         total_points state pre_rating mean_opp_pre…¹
##   <chr>         <chr>               <chr>        <chr> <chr>               <dbl>
## 1 1             GARY HUA            6.0          ON    1794                1605.
## 2 2             DAKSHESH DARURI     6.0          MI    1553                1469.
## 3 3             ADITYA BAJAJ        6.0          MI    1384                1564.
## 4 4             PATRICK H SCHILLING 5.5          MI    1716                1574.
## 5 5             HANSHI ZUO          5.5          MI    1655                1501.
## 6 6             HANSEN SONG         5.0          OH    1686                1519.
## # … with abbreviated variable name ¹​mean_opp_pre_rating