Overview

In this project, we import chess tournament results from a .txt file, organize the data into a data frame, and then analyze the results.

Importing the File

In this code block we load the necessary libraries, import the file from Molly’s github repository, and get the data into a data frame. However, there is only one column in the data frame, with all the information from each row stored as a string in that column.

library(readr)
library(stringr)
library(tidyr)
library(knitr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

chess_url <- "https://raw.githubusercontent.com/mollysiebecker/DATA-607/f333e0b63eb8418b6aa696a81a637215b4a758e0/Chess%20Tournament%20Results"
chess_results_raw <- read_lines(file = "https://raw.githubusercontent.com/mollysiebecker/DATA-607/f333e0b63eb8418b6aa696a81a637215b4a758e0/Chess%20Tournament%20Results")

chess_df_raw <- data.frame(chess_results_raw)

kable(chess_df_raw, format = "pipe", caption = "Results Data Frame")
Results Data Frame
chess_results_raw
—————————————————————————————–
Pair | Player Name |Total|Round|Round|Round|Round|Round|Round|Round|
Num | USCF ID / Rtg (Pre->Post) | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
—————————————————————————————–
1 | GARY HUA |6.0 |W 39|W 21|W 18|W 14|W 7|D 12|D 4|
ON | 15445895 / R: 1794 ->1817 |N:2 |W |B |W |B |W |B |W |
—————————————————————————————–
2 | DAKSHESH DARURI |6.0 |W 63|W 58|L 4|W 17|W 16|W 20|W 7|
MI | 14598900 / R: 1553 ->1663 |N:2 |B |W |B |W |B |W |B |
—————————————————————————————–
3 | ADITYA BAJAJ |6.0 |L 8|W 61|W 25|W 21|W 11|W 13|W 12|
MI | 14959604 / R: 1384 ->1640 |N:2 |W |B |W |B |W |B |W |
—————————————————————————————–
4 | PATRICK H SCHILLING |5.5 |W 23|D 28|W 2|W 26|D 5|W 19|D 1|
MI | 12616049 / R: 1716 ->1744 |N:2 |W |B |W |B |W |B |B |
—————————————————————————————–
5 | HANSHI ZUO |5.5 |W 45|W 37|D 12|D 13|D 4|W 14|W 17|
MI | 14601533 / R: 1655 ->1690 |N:2 |B |W |B |W |B |W |B |
—————————————————————————————–
6 | HANSEN SONG |5.0 |W 34|D 29|L 11|W 35|D 10|W 27|W 21|
OH | 15055204 / R: 1686 ->1687 |N:3 |W |B |W |B |B |W |B |
—————————————————————————————–
7 | GARY DEE SWATHELL |5.0 |W 57|W 46|W 13|W 11|L 1|W 9|L 2|
MI | 11146376 / R: 1649 ->1673 |N:3 |W |B |W |B |B |W |W |
—————————————————————————————–
8 | EZEKIEL HOUGHTON |5.0 |W 3|W 32|L 14|L 9|W 47|W 28|W 19|
MI | 15142253 / R: 1641P17->1657P24 |N:3 |B |W |B |W |B |W |W |
—————————————————————————————–
9 | STEFANO LEE |5.0 |W 25|L 18|W 59|W 8|W 26|L 7|W 20|
ON | 14954524 / R: 1411 ->1564 |N:2 |W |B |W |B |W |B |B |
—————————————————————————————–
10 | ANVIT RAO |5.0 |D 16|L 19|W 55|W 31|D 6|W 25|W 18|
MI | 14150362 / R: 1365 ->1544 |N:3 |W |W |B |B |W |B |W |
—————————————————————————————–
11 | CAMERON WILLIAM MC LEMAN |4.5 |D 38|W 56|W 6|L 7|L 3|W 34|W 26|
MI | 12581589 / R: 1712 ->1696 |N:3 |B |W |B |W |B |W |B |
—————————————————————————————–
12 | KENNETH J TACK |4.5 |W 42|W 33|D 5|W 38|H |D 1|L 3|
MI | 12681257 / R: 1663 ->1670 |N:3 |W |B |W |B | |W |B |
—————————————————————————————–
13 | TORRANCE HENRY JR |4.5 |W 36|W 27|L 7|D 5|W 33|L 3|W 32|
MI | 15082995 / R: 1666 ->1662 |N:3 |B |W |B |B |W |W |B |
—————————————————————————————–
14 | BRADLEY SHAW |4.5 |W 54|W 44|W 8|L 1|D 27|L 5|W 31|
MI | 10131499 / R: 1610 ->1618 |N:3 |W |B |W |W |B |B |W |
—————————————————————————————–
15 | ZACHARY JAMES HOUGHTON |4.5 |D 19|L 16|W 30|L 22|W 54|W 33|W 38|
MI | 15619130 / R: 1220P13->1416P20 |N:3 |B |B |W |W |B |B |W |
—————————————————————————————–
16 | MIKE NIKITIN |4.0 |D 10|W 15|H |W 39|L 2|W 36|U |
MI | 10295068 / R: 1604 ->1613 |N:3 |B |W | |B |W |B | |
—————————————————————————————–
17 | RONALD GRZEGORCZYK |4.0 |W 48|W 41|L 26|L 2|W 23|W 22|L 5|
MI | 10297702 / R: 1629 ->1610 |N:3 |W |B |W |B |W |B |W |
—————————————————————————————–
18 | DAVID SUNDEEN |4.0 |W 47|W 9|L 1|W 32|L 19|W 38|L 10|
MI | 11342094 / R: 1600 ->1600 |N:3 |B |W |B |W |B |W |B |
—————————————————————————————–
19 | DIPANKAR ROY |4.0 |D 15|W 10|W 52|D 28|W 18|L 4|L 8|
MI | 14862333 / R: 1564 ->1570 |N:3 |W |B |W |B |W |W |B |
—————————————————————————————–
20 | JASON ZHENG |4.0 |L 40|W 49|W 23|W 41|W 28|L 2|L 9|
MI | 14529060 / R: 1595 ->1569 |N:4 |W |B |W |B |W |B |W |
—————————————————————————————–
21 | DINH DANG BUI |4.0 |W 43|L 1|W 47|L 3|W 40|W 39|L 6|
ON | 15495066 / R: 1563P22->1562 |N:3 |B |W |B |W |W |B |W |
—————————————————————————————–
22 | EUGENE L MCCLURE |4.0 |W 64|D 52|L 28|W 15|H |L 17|W 40|
MI | 12405534 / R: 1555 ->1529 |N:4 |W |B |W |B | |W |B |
—————————————————————————————–
23 | ALAN BUI |4.0 |L 4|W 43|L 20|W 58|L 17|W 37|W 46|
ON | 15030142 / R: 1363 ->1371 | |B |W |B |W |B |W |B |
—————————————————————————————–
24 | MICHAEL R ALDRICH |4.0 |L 28|L 47|W 43|L 25|W 60|W 44|W 39|
MI | 13469010 / R: 1229 ->1300 |N:4 |B |W |B |B |W |W |B |
—————————————————————————————–
25 | LOREN SCHWIEBERT |3.5 |L 9|W 53|L 3|W 24|D 34|L 10|W 47|
MI | 12486656 / R: 1745 ->1681 |N:4 |B |W |B |W |B |W |B |
—————————————————————————————–
26 | MAX ZHU |3.5 |W 49|W 40|W 17|L 4|L 9|D 32|L 11|
ON | 15131520 / R: 1579 ->1564 |N:4 |B |W |B |W |B |W |W |
—————————————————————————————–
27 | GAURAV GIDWANI |3.5 |W 51|L 13|W 46|W 37|D 14|L 6|U |
MI | 14476567 / R: 1552 ->1539 |N:4 |W |B |W |B |W |B | |
—————————————————————————————–
28 | SOFIA ADINA STANESCU-BELLU |3.5 |W 24|D 4|W 22|D 19|L 20|L 8|D 36|
MI | 14882954 / R: 1507 ->1513 |N:3 |W |W |B |W |B |B |W |
—————————————————————————————–
29 | CHIEDOZIE OKORIE |3.5 |W 50|D 6|L 38|L 34|W 52|W 48|U |
MI | 15323285 / R: 1602P6 ->1508P12 |N:4 |B |W |B |W |W |B | |
—————————————————————————————–
30 | GEORGE AVERY JONES |3.5 |L 52|D 64|L 15|W 55|L 31|W 61|W 50|
ON | 12577178 / R: 1522 ->1444 | |W |B |B |W |W |B |B |
—————————————————————————————–
31 | RISHI SHETTY |3.5 |L 58|D 55|W 64|L 10|W 30|W 50|L 14|
MI | 15131618 / R: 1494 ->1444 | |B |W |B |W |B |W |B |
—————————————————————————————–
32 | JOSHUA PHILIP MATHEWS |3.5 |W 61|L 8|W 44|L 18|W 51|D 26|L 13|
ON | 14073750 / R: 1441 ->1433 |N:4 |W |B |W |B |W |B |W |
—————————————————————————————–
33 | JADE GE |3.5 |W 60|L 12|W 50|D 36|L 13|L 15|W 51|
MI | 14691842 / R: 1449 ->1421 | |B |W |B |W |B |W |B |
—————————————————————————————–
34 | MICHAEL JEFFERY THOMAS |3.5 |L 6|W 60|L 37|W 29|D 25|L 11|W 52|
MI | 15051807 / R: 1399 ->1400 | |B |W |B |B |W |B |W |
—————————————————————————————–
35 | JOSHUA DAVID LEE |3.5 |L 46|L 38|W 56|L 6|W 57|D 52|W 48|
MI | 14601397 / R: 1438 ->1392 | |W |W |B |W |B |B |W |
—————————————————————————————–
36 | SIDDHARTH JHA |3.5 |L 13|W 57|W 51|D 33|H |L 16|D 28|
MI | 14773163 / R: 1355 ->1367 |N:4 |W |B |W |B | |W |B |
—————————————————————————————–
37 | AMIYATOSH PWNANANDAM |3.5 |B |L 5|W 34|L 27|H |L 23|W 61|
MI | 15489571 / R: 980P12->1077P17 | | |B |W |W | |B |W |
—————————————————————————————–
38 | BRIAN LIU |3.0 |D 11|W 35|W 29|L 12|H |L 18|L 15|
MI | 15108523 / R: 1423 ->1439 |N:4 |W |B |W |W | |B |B |
—————————————————————————————–
39 | JOEL R HENDON |3.0 |L 1|W 54|W 40|L 16|W 44|L 21|L 24|
MI | 12923035 / R: 1436P23->1413 |N:4 |B |W |B |W |B |W |W |
—————————————————————————————–
40 | FOREST ZHANG |3.0 |W 20|L 26|L 39|W 59|L 21|W 56|L 22|
MI | 14892710 / R: 1348 ->1346 | |B |B |W |W |B |W |W |
—————————————————————————————–
41 | KYLE WILLIAM MURPHY |3.0 |W 59|L 17|W 58|L 20|X |U |U |
MI | 15761443 / R: 1403P5 ->1341P9 | |B |W |B |W | | | |
—————————————————————————————–
42 | JARED GE |3.0 |L 12|L 50|L 57|D 60|D 61|W 64|W 56|
MI | 14462326 / R: 1332 ->1256 | |B |W |B |B |W |W |B |
—————————————————————————————–
43 | ROBERT GLEN VASEY |3.0 |L 21|L 23|L 24|W 63|W 59|L 46|W 55|
MI | 14101068 / R: 1283 ->1244 | |W |B |W |W |B |B |W |
—————————————————————————————–
44 | JUSTIN D SCHILLING |3.0 |B |L 14|L 32|W 53|L 39|L 24|W 59|
MI | 15323504 / R: 1199 ->1199 | | |W |B |B |W |B |W |
—————————————————————————————–
45 | DEREK YAN |3.0 |L 5|L 51|D 60|L 56|W 63|D 55|W 58|
MI | 15372807 / R: 1242 ->1191 | |W |B |W |B |W |B |W |
—————————————————————————————–
46 | JACOB ALEXANDER LAVALLEY |3.0 |W 35|L 7|L 27|L 50|W 64|W 43|L 23|
MI | 15490981 / R: 377P3 ->1076P10 | |B |W |B |W |B |W |W |
—————————————————————————————–
47 | ERIC WRIGHT |2.5 |L 18|W 24|L 21|W 61|L 8|D 51|L 25|
MI | 12533115 / R: 1362 ->1341 | |W |B |W |B |W |B |W |
—————————————————————————————–
48 | DANIEL KHAIN |2.5 |L 17|W 63|H |D 52|H |L 29|L 35|
MI | 14369165 / R: 1382 ->1335 | |B |W | |B | |W |B |
—————————————————————————————–
49 | MICHAEL J MARTIN |2.5 |L 26|L 20|D 63|D 64|W 58|H |U |
MI | 12531685 / R: 1291P12->1259P17 | |W |W |B |W |B | | |
—————————————————————————————–
50 | SHIVAM JHA |2.5 |L 29|W 42|L 33|W 46|H |L 31|L 30|
MI | 14773178 / R: 1056 ->1111 | |W |B |W |B | |B |W |
—————————————————————————————–
51 | TEJAS AYYAGARI |2.5 |L 27|W 45|L 36|W 57|L 32|D 47|L 33|
MI | 15205474 / R: 1011 ->1097 | |B |W |B |W |B |W |W |
—————————————————————————————–
52 | ETHAN GUO |2.5 |W 30|D 22|L 19|D 48|L 29|D 35|L 34|
MI | 14918803 / R: 935 ->1092 |N:4 |B |W |B |W |B |W |B |
—————————————————————————————–
53 | JOSE C YBARRA |2.0 |H |L 25|H |L 44|U |W 57|U |
MI | 12578849 / R: 1393 ->1359 | | |B | |W | |W | |
—————————————————————————————–
54 | LARRY HODGE |2.0 |L 14|L 39|L 61|B |L 15|L 59|W 64|
MI | 12836773 / R: 1270 ->1200 | |B |B |W | |W |B |W |
—————————————————————————————–
55 | ALEX KONG |2.0 |L 62|D 31|L 10|L 30|B |D 45|L 43|
MI | 15412571 / R: 1186 ->1163 | |W |B |W |B | |W |B |
—————————————————————————————–
56 | MARISA RICCI |2.0 |H |L 11|L 35|W 45|H |L 40|L 42|
MI | 14679887 / R: 1153 ->1140 | | |B |W |W | |B |W |
—————————————————————————————–
57 | MICHAEL LU |2.0 |L 7|L 36|W 42|L 51|L 35|L 53|B |
MI | 15113330 / R: 1092 ->1079 | |B |W |W |B |W |B | |
—————————————————————————————–
58 | VIRAJ MOHILE |2.0 |W 31|L 2|L 41|L 23|L 49|B |L 45|
MI | 14700365 / R: 917 -> 941 | |W |B |W |B |W | |B |
—————————————————————————————–
59 | SEAN M MC CORMICK |2.0 |L 41|B |L 9|L 40|L 43|W 54|L 44|
MI | 12841036 / R: 853 -> 878 | |W | |B |B |W |W |B |
—————————————————————————————–
60 | JULIA SHEN |1.5 |L 33|L 34|D 45|D 42|L 24|H |U |
MI | 14579262 / R: 967 -> 984 | |W |B |B |W |B | | |
—————————————————————————————–
61 | JEZZEL FARKAS |1.5 |L 32|L 3|W 54|L 47|D 42|L 30|L 37|
ON | 15771592 / R: 955P11-> 979P18 | |B |W |B |W |B |W |B |
—————————————————————————————–
62 | ASHWIN BALAJI |1.0 |W 55|U |U |U |U |U |U |
MI | 15219542 / R: 1530 ->1535 | |B | | | | | | |
—————————————————————————————–
63 | THOMAS JOSEPH HOSMER |1.0 |L 2|L 48|D 49|L 43|L 45|H |U |
MI | 15057092 / R: 1175 ->1125 | |W |B |W |B |B | | |
—————————————————————————————–
64 | BEN LI |1.0 |L 22|D 30|L 31|D 49|L 46|L 42|L 54|
MI | 15006561 / R: 1163 ->1112 | |B |W |W |B |W |B |B |
—————————————————————————————–

Splitting the Data

In this code block we split the data into multiple columns, and remove the rows that are just dashes and NAs.

suppressWarnings({chess_wider <- chess_df_raw %>%
  separate(chess_results_raw, into = c("Number", "Player Name", "Total Pts", "Round 1", "Round 2", "Round 3", "Round 4", "Round 5", "Round 6", "Round 7"), sep = "\\|")})

chess_filtered <- na.omit(chess_wider)

kable(chess_filtered, format = "pipe", col.names = c("Number", "Player Name", "Total Pts", "Rd 1 Result", "Rd 2 Result", "Rd 3 Result", "Rd 4 Result", "Rd 5 Result", "Rd 6 Result", "Rd 7 Result"), caption = "Data Frame With Multiple Columns", align = "clclllllll")
Data Frame With Multiple Columns
Number Player Name Total Pts Rd 1 Result Rd 2 Result Rd 3 Result Rd 4 Result Rd 5 Result Rd 6 Result Rd 7 Result
2 Pair Player Name Total Round Round Round Round Round Round Round
3 Num USCF ID / Rtg (Pre->Post) Pts 1 2 3 4 5 6 7
5 1 GARY HUA 6.0 W 39 W 21 W 18 W 14 W 7 D 12 D 4
6 ON 15445895 / R: 1794 ->1817 N:2 W B W B W B W
8 2 DAKSHESH DARURI 6.0 W 63 W 58 L 4 W 17 W 16 W 20 W 7
9 MI 14598900 / R: 1553 ->1663 N:2 B W B W B W B
11 3 ADITYA BAJAJ 6.0 L 8 W 61 W 25 W 21 W 11 W 13 W 12
12 MI 14959604 / R: 1384 ->1640 N:2 W B W B W B W
14 4 PATRICK H SCHILLING 5.5 W 23 D 28 W 2 W 26 D 5 W 19 D 1
15 MI 12616049 / R: 1716 ->1744 N:2 W B W B W B B
17 5 HANSHI ZUO 5.5 W 45 W 37 D 12 D 13 D 4 W 14 W 17
18 MI 14601533 / R: 1655 ->1690 N:2 B W B W B W B
20 6 HANSEN SONG 5.0 W 34 D 29 L 11 W 35 D 10 W 27 W 21
21 OH 15055204 / R: 1686 ->1687 N:3 W B W B B W B
23 7 GARY DEE SWATHELL 5.0 W 57 W 46 W 13 W 11 L 1 W 9 L 2
24 MI 11146376 / R: 1649 ->1673 N:3 W B W B B W W
26 8 EZEKIEL HOUGHTON 5.0 W 3 W 32 L 14 L 9 W 47 W 28 W 19
27 MI 15142253 / R: 1641P17->1657P24 N:3 B W B W B W W
29 9 STEFANO LEE 5.0 W 25 L 18 W 59 W 8 W 26 L 7 W 20
30 ON 14954524 / R: 1411 ->1564 N:2 W B W B W B B
32 10 ANVIT RAO 5.0 D 16 L 19 W 55 W 31 D 6 W 25 W 18
33 MI 14150362 / R: 1365 ->1544 N:3 W W B B W B W
35 11 CAMERON WILLIAM MC LEMAN 4.5 D 38 W 56 W 6 L 7 L 3 W 34 W 26
36 MI 12581589 / R: 1712 ->1696 N:3 B W B W B W B
38 12 KENNETH J TACK 4.5 W 42 W 33 D 5 W 38 H D 1 L 3
39 MI 12681257 / R: 1663 ->1670 N:3 W B W B W B
41 13 TORRANCE HENRY JR 4.5 W 36 W 27 L 7 D 5 W 33 L 3 W 32
42 MI 15082995 / R: 1666 ->1662 N:3 B W B B W W B
44 14 BRADLEY SHAW 4.5 W 54 W 44 W 8 L 1 D 27 L 5 W 31
45 MI 10131499 / R: 1610 ->1618 N:3 W B W W B B W
47 15 ZACHARY JAMES HOUGHTON 4.5 D 19 L 16 W 30 L 22 W 54 W 33 W 38
48 MI 15619130 / R: 1220P13->1416P20 N:3 B B W W B B W
50 16 MIKE NIKITIN 4.0 D 10 W 15 H W 39 L 2 W 36 U
51 MI 10295068 / R: 1604 ->1613 N:3 B W B W B
53 17 RONALD GRZEGORCZYK 4.0 W 48 W 41 L 26 L 2 W 23 W 22 L 5
54 MI 10297702 / R: 1629 ->1610 N:3 W B W B W B W
56 18 DAVID SUNDEEN 4.0 W 47 W 9 L 1 W 32 L 19 W 38 L 10
57 MI 11342094 / R: 1600 ->1600 N:3 B W B W B W B
59 19 DIPANKAR ROY 4.0 D 15 W 10 W 52 D 28 W 18 L 4 L 8
60 MI 14862333 / R: 1564 ->1570 N:3 W B W B W W B
62 20 JASON ZHENG 4.0 L 40 W 49 W 23 W 41 W 28 L 2 L 9
63 MI 14529060 / R: 1595 ->1569 N:4 W B W B W B W
65 21 DINH DANG BUI 4.0 W 43 L 1 W 47 L 3 W 40 W 39 L 6
66 ON 15495066 / R: 1563P22->1562 N:3 B W B W W B W
68 22 EUGENE L MCCLURE 4.0 W 64 D 52 L 28 W 15 H L 17 W 40
69 MI 12405534 / R: 1555 ->1529 N:4 W B W B W B
71 23 ALAN BUI 4.0 L 4 W 43 L 20 W 58 L 17 W 37 W 46
72 ON 15030142 / R: 1363 ->1371 B W B W B W B
74 24 MICHAEL R ALDRICH 4.0 L 28 L 47 W 43 L 25 W 60 W 44 W 39
75 MI 13469010 / R: 1229 ->1300 N:4 B W B B W W B
77 25 LOREN SCHWIEBERT 3.5 L 9 W 53 L 3 W 24 D 34 L 10 W 47
78 MI 12486656 / R: 1745 ->1681 N:4 B W B W B W B
80 26 MAX ZHU 3.5 W 49 W 40 W 17 L 4 L 9 D 32 L 11
81 ON 15131520 / R: 1579 ->1564 N:4 B W B W B W W
83 27 GAURAV GIDWANI 3.5 W 51 L 13 W 46 W 37 D 14 L 6 U
84 MI 14476567 / R: 1552 ->1539 N:4 W B W B W B
86 28 SOFIA ADINA STANESCU-BELLU 3.5 W 24 D 4 W 22 D 19 L 20 L 8 D 36
87 MI 14882954 / R: 1507 ->1513 N:3 W W B W B B W
89 29 CHIEDOZIE OKORIE 3.5 W 50 D 6 L 38 L 34 W 52 W 48 U
90 MI 15323285 / R: 1602P6 ->1508P12 N:4 B W B W W B
92 30 GEORGE AVERY JONES 3.5 L 52 D 64 L 15 W 55 L 31 W 61 W 50
93 ON 12577178 / R: 1522 ->1444 W B B W W B B
95 31 RISHI SHETTY 3.5 L 58 D 55 W 64 L 10 W 30 W 50 L 14
96 MI 15131618 / R: 1494 ->1444 B W B W B W B
98 32 JOSHUA PHILIP MATHEWS 3.5 W 61 L 8 W 44 L 18 W 51 D 26 L 13
99 ON 14073750 / R: 1441 ->1433 N:4 W B W B W B W
101 33 JADE GE 3.5 W 60 L 12 W 50 D 36 L 13 L 15 W 51
102 MI 14691842 / R: 1449 ->1421 B W B W B W B
104 34 MICHAEL JEFFERY THOMAS 3.5 L 6 W 60 L 37 W 29 D 25 L 11 W 52
105 MI 15051807 / R: 1399 ->1400 B W B B W B W
107 35 JOSHUA DAVID LEE 3.5 L 46 L 38 W 56 L 6 W 57 D 52 W 48
108 MI 14601397 / R: 1438 ->1392 W W B W B B W
110 36 SIDDHARTH JHA 3.5 L 13 W 57 W 51 D 33 H L 16 D 28
111 MI 14773163 / R: 1355 ->1367 N:4 W B W B W B
113 37 AMIYATOSH PWNANANDAM 3.5 B L 5 W 34 L 27 H L 23 W 61
114 MI 15489571 / R: 980P12->1077P17 B W W B W
116 38 BRIAN LIU 3.0 D 11 W 35 W 29 L 12 H L 18 L 15
117 MI 15108523 / R: 1423 ->1439 N:4 W B W W B B
119 39 JOEL R HENDON 3.0 L 1 W 54 W 40 L 16 W 44 L 21 L 24
120 MI 12923035 / R: 1436P23->1413 N:4 B W B W B W W
122 40 FOREST ZHANG 3.0 W 20 L 26 L 39 W 59 L 21 W 56 L 22
123 MI 14892710 / R: 1348 ->1346 B B W W B W W
125 41 KYLE WILLIAM MURPHY 3.0 W 59 L 17 W 58 L 20 X U U
126 MI 15761443 / R: 1403P5 ->1341P9 B W B W
128 42 JARED GE 3.0 L 12 L 50 L 57 D 60 D 61 W 64 W 56
129 MI 14462326 / R: 1332 ->1256 B W B B W W B
131 43 ROBERT GLEN VASEY 3.0 L 21 L 23 L 24 W 63 W 59 L 46 W 55
132 MI 14101068 / R: 1283 ->1244 W B W W B B W
134 44 JUSTIN D SCHILLING 3.0 B L 14 L 32 W 53 L 39 L 24 W 59
135 MI 15323504 / R: 1199 ->1199 W B B W B W
137 45 DEREK YAN 3.0 L 5 L 51 D 60 L 56 W 63 D 55 W 58
138 MI 15372807 / R: 1242 ->1191 W B W B W B W
140 46 JACOB ALEXANDER LAVALLEY 3.0 W 35 L 7 L 27 L 50 W 64 W 43 L 23
141 MI 15490981 / R: 377P3 ->1076P10 B W B W B W W
143 47 ERIC WRIGHT 2.5 L 18 W 24 L 21 W 61 L 8 D 51 L 25
144 MI 12533115 / R: 1362 ->1341 W B W B W B W
146 48 DANIEL KHAIN 2.5 L 17 W 63 H D 52 H L 29 L 35
147 MI 14369165 / R: 1382 ->1335 B W B W B
149 49 MICHAEL J MARTIN 2.5 L 26 L 20 D 63 D 64 W 58 H U
150 MI 12531685 / R: 1291P12->1259P17 W W B W B
152 50 SHIVAM JHA 2.5 L 29 W 42 L 33 W 46 H L 31 L 30
153 MI 14773178 / R: 1056 ->1111 W B W B B W
155 51 TEJAS AYYAGARI 2.5 L 27 W 45 L 36 W 57 L 32 D 47 L 33
156 MI 15205474 / R: 1011 ->1097 B W B W B W W
158 52 ETHAN GUO 2.5 W 30 D 22 L 19 D 48 L 29 D 35 L 34
159 MI 14918803 / R: 935 ->1092 N:4 B W B W B W B
161 53 JOSE C YBARRA 2.0 H L 25 H L 44 U W 57 U
162 MI 12578849 / R: 1393 ->1359 B W W
164 54 LARRY HODGE 2.0 L 14 L 39 L 61 B L 15 L 59 W 64
165 MI 12836773 / R: 1270 ->1200 B B W W B W
167 55 ALEX KONG 2.0 L 62 D 31 L 10 L 30 B D 45 L 43
168 MI 15412571 / R: 1186 ->1163 W B W B W B
170 56 MARISA RICCI 2.0 H L 11 L 35 W 45 H L 40 L 42
171 MI 14679887 / R: 1153 ->1140 B W W B W
173 57 MICHAEL LU 2.0 L 7 L 36 W 42 L 51 L 35 L 53 B
174 MI 15113330 / R: 1092 ->1079 B W W B W B
176 58 VIRAJ MOHILE 2.0 W 31 L 2 L 41 L 23 L 49 B L 45
177 MI 14700365 / R: 917 -> 941 W B W B W B
179 59 SEAN M MC CORMICK 2.0 L 41 B L 9 L 40 L 43 W 54 L 44
180 MI 12841036 / R: 853 -> 878 W B B W W B
182 60 JULIA SHEN 1.5 L 33 L 34 D 45 D 42 L 24 H U
183 MI 14579262 / R: 967 -> 984 W B B W B
185 61 JEZZEL FARKAS 1.5 L 32 L 3 W 54 L 47 D 42 L 30 L 37
186 ON 15771592 / R: 955P11-> 979P18 B W B W B W B
188 62 ASHWIN BALAJI 1.0 W 55 U U U U U U
189 MI 15219542 / R: 1530 ->1535 B
191 63 THOMAS JOSEPH HOSMER 1.0 L 2 L 48 D 49 L 43 L 45 H U
192 MI 15057092 / R: 1175 ->1125 W B W B B
194 64 BEN LI 1.0 L 22 D 30 L 31 D 49 L 46 L 42 L 54
195 MI 15006561 / R: 1163 ->1112 B W W B W B B

Combining Rows

In the previous data frame, the important data for each player is spread across two rows. In this code block, we use for loops to get each player’s State and Pre-Rating into the same line as the player’s name and number. This creates a redundant row with no more useful information after the row for each player, so we select only the rows that start with the player number. This results in a data frame that contains only one row for each player and contains all necessary player information: Player Number, Player Name, Total Points, their opponent and results for rounds 1-7, their State, and their rating information.

for (i in 1:nrow(chess_filtered)) {
chess_filtered$State[i] <- chess_filtered$Number[i+1]
}

for (i in 1:nrow(chess_filtered)) {
chess_filtered$Pre_Rating_String[i] <- chess_filtered$`Player Name`[i+1]
}

matching_rows <- grepl(".*\\d+.*", chess_filtered$`Number`)
chess_filtered <- chess_filtered[matching_rows, ]

kable(chess_filtered, format = "pipe", col.names = c("Number", "Player Name", "Total Pts", "Rd 1 Result", "Rd 2 Result", "Rd 3 Result", "Rd 4 Result", "Rd 5 Result", "Rd 6 Result", "Rd 7 Result", "State", "Rating String"), caption = "Data Frame With One Row per Player", align = "clcllllllll")
Data Frame With One Row per Player
Number Player Name Total Pts Rd 1 Result Rd 2 Result Rd 3 Result Rd 4 Result Rd 5 Result Rd 6 Result Rd 7 Result State Rating String
5 1 GARY HUA 6.0 W 39 W 21 W 18 W 14 W 7 D 12 D 4 ON 15445895 / R: 1794 ->1817
8 2 DAKSHESH DARURI 6.0 W 63 W 58 L 4 W 17 W 16 W 20 W 7 MI 14598900 / R: 1553 ->1663
11 3 ADITYA BAJAJ 6.0 L 8 W 61 W 25 W 21 W 11 W 13 W 12 MI 14959604 / R: 1384 ->1640
14 4 PATRICK H SCHILLING 5.5 W 23 D 28 W 2 W 26 D 5 W 19 D 1 MI 12616049 / R: 1716 ->1744
17 5 HANSHI ZUO 5.5 W 45 W 37 D 12 D 13 D 4 W 14 W 17 MI 14601533 / R: 1655 ->1690
20 6 HANSEN SONG 5.0 W 34 D 29 L 11 W 35 D 10 W 27 W 21 OH 15055204 / R: 1686 ->1687
23 7 GARY DEE SWATHELL 5.0 W 57 W 46 W 13 W 11 L 1 W 9 L 2 MI 11146376 / R: 1649 ->1673
26 8 EZEKIEL HOUGHTON 5.0 W 3 W 32 L 14 L 9 W 47 W 28 W 19 MI 15142253 / R: 1641P17->1657P24
29 9 STEFANO LEE 5.0 W 25 L 18 W 59 W 8 W 26 L 7 W 20 ON 14954524 / R: 1411 ->1564
32 10 ANVIT RAO 5.0 D 16 L 19 W 55 W 31 D 6 W 25 W 18 MI 14150362 / R: 1365 ->1544
35 11 CAMERON WILLIAM MC LEMAN 4.5 D 38 W 56 W 6 L 7 L 3 W 34 W 26 MI 12581589 / R: 1712 ->1696
38 12 KENNETH J TACK 4.5 W 42 W 33 D 5 W 38 H D 1 L 3 MI 12681257 / R: 1663 ->1670
41 13 TORRANCE HENRY JR 4.5 W 36 W 27 L 7 D 5 W 33 L 3 W 32 MI 15082995 / R: 1666 ->1662
44 14 BRADLEY SHAW 4.5 W 54 W 44 W 8 L 1 D 27 L 5 W 31 MI 10131499 / R: 1610 ->1618
47 15 ZACHARY JAMES HOUGHTON 4.5 D 19 L 16 W 30 L 22 W 54 W 33 W 38 MI 15619130 / R: 1220P13->1416P20
50 16 MIKE NIKITIN 4.0 D 10 W 15 H W 39 L 2 W 36 U MI 10295068 / R: 1604 ->1613
53 17 RONALD GRZEGORCZYK 4.0 W 48 W 41 L 26 L 2 W 23 W 22 L 5 MI 10297702 / R: 1629 ->1610
56 18 DAVID SUNDEEN 4.0 W 47 W 9 L 1 W 32 L 19 W 38 L 10 MI 11342094 / R: 1600 ->1600
59 19 DIPANKAR ROY 4.0 D 15 W 10 W 52 D 28 W 18 L 4 L 8 MI 14862333 / R: 1564 ->1570
62 20 JASON ZHENG 4.0 L 40 W 49 W 23 W 41 W 28 L 2 L 9 MI 14529060 / R: 1595 ->1569
65 21 DINH DANG BUI 4.0 W 43 L 1 W 47 L 3 W 40 W 39 L 6 ON 15495066 / R: 1563P22->1562
68 22 EUGENE L MCCLURE 4.0 W 64 D 52 L 28 W 15 H L 17 W 40 MI 12405534 / R: 1555 ->1529
71 23 ALAN BUI 4.0 L 4 W 43 L 20 W 58 L 17 W 37 W 46 ON 15030142 / R: 1363 ->1371
74 24 MICHAEL R ALDRICH 4.0 L 28 L 47 W 43 L 25 W 60 W 44 W 39 MI 13469010 / R: 1229 ->1300
77 25 LOREN SCHWIEBERT 3.5 L 9 W 53 L 3 W 24 D 34 L 10 W 47 MI 12486656 / R: 1745 ->1681
80 26 MAX ZHU 3.5 W 49 W 40 W 17 L 4 L 9 D 32 L 11 ON 15131520 / R: 1579 ->1564
83 27 GAURAV GIDWANI 3.5 W 51 L 13 W 46 W 37 D 14 L 6 U MI 14476567 / R: 1552 ->1539
86 28 SOFIA ADINA STANESCU-BELLU 3.5 W 24 D 4 W 22 D 19 L 20 L 8 D 36 MI 14882954 / R: 1507 ->1513
89 29 CHIEDOZIE OKORIE 3.5 W 50 D 6 L 38 L 34 W 52 W 48 U MI 15323285 / R: 1602P6 ->1508P12
92 30 GEORGE AVERY JONES 3.5 L 52 D 64 L 15 W 55 L 31 W 61 W 50 ON 12577178 / R: 1522 ->1444
95 31 RISHI SHETTY 3.5 L 58 D 55 W 64 L 10 W 30 W 50 L 14 MI 15131618 / R: 1494 ->1444
98 32 JOSHUA PHILIP MATHEWS 3.5 W 61 L 8 W 44 L 18 W 51 D 26 L 13 ON 14073750 / R: 1441 ->1433
101 33 JADE GE 3.5 W 60 L 12 W 50 D 36 L 13 L 15 W 51 MI 14691842 / R: 1449 ->1421
104 34 MICHAEL JEFFERY THOMAS 3.5 L 6 W 60 L 37 W 29 D 25 L 11 W 52 MI 15051807 / R: 1399 ->1400
107 35 JOSHUA DAVID LEE 3.5 L 46 L 38 W 56 L 6 W 57 D 52 W 48 MI 14601397 / R: 1438 ->1392
110 36 SIDDHARTH JHA 3.5 L 13 W 57 W 51 D 33 H L 16 D 28 MI 14773163 / R: 1355 ->1367
113 37 AMIYATOSH PWNANANDAM 3.5 B L 5 W 34 L 27 H L 23 W 61 MI 15489571 / R: 980P12->1077P17
116 38 BRIAN LIU 3.0 D 11 W 35 W 29 L 12 H L 18 L 15 MI 15108523 / R: 1423 ->1439
119 39 JOEL R HENDON 3.0 L 1 W 54 W 40 L 16 W 44 L 21 L 24 MI 12923035 / R: 1436P23->1413
122 40 FOREST ZHANG 3.0 W 20 L 26 L 39 W 59 L 21 W 56 L 22 MI 14892710 / R: 1348 ->1346
125 41 KYLE WILLIAM MURPHY 3.0 W 59 L 17 W 58 L 20 X U U MI 15761443 / R: 1403P5 ->1341P9
128 42 JARED GE 3.0 L 12 L 50 L 57 D 60 D 61 W 64 W 56 MI 14462326 / R: 1332 ->1256
131 43 ROBERT GLEN VASEY 3.0 L 21 L 23 L 24 W 63 W 59 L 46 W 55 MI 14101068 / R: 1283 ->1244
134 44 JUSTIN D SCHILLING 3.0 B L 14 L 32 W 53 L 39 L 24 W 59 MI 15323504 / R: 1199 ->1199
137 45 DEREK YAN 3.0 L 5 L 51 D 60 L 56 W 63 D 55 W 58 MI 15372807 / R: 1242 ->1191
140 46 JACOB ALEXANDER LAVALLEY 3.0 W 35 L 7 L 27 L 50 W 64 W 43 L 23 MI 15490981 / R: 377P3 ->1076P10
143 47 ERIC WRIGHT 2.5 L 18 W 24 L 21 W 61 L 8 D 51 L 25 MI 12533115 / R: 1362 ->1341
146 48 DANIEL KHAIN 2.5 L 17 W 63 H D 52 H L 29 L 35 MI 14369165 / R: 1382 ->1335
149 49 MICHAEL J MARTIN 2.5 L 26 L 20 D 63 D 64 W 58 H U MI 12531685 / R: 1291P12->1259P17
152 50 SHIVAM JHA 2.5 L 29 W 42 L 33 W 46 H L 31 L 30 MI 14773178 / R: 1056 ->1111
155 51 TEJAS AYYAGARI 2.5 L 27 W 45 L 36 W 57 L 32 D 47 L 33 MI 15205474 / R: 1011 ->1097
158 52 ETHAN GUO 2.5 W 30 D 22 L 19 D 48 L 29 D 35 L 34 MI 14918803 / R: 935 ->1092
161 53 JOSE C YBARRA 2.0 H L 25 H L 44 U W 57 U MI 12578849 / R: 1393 ->1359
164 54 LARRY HODGE 2.0 L 14 L 39 L 61 B L 15 L 59 W 64 MI 12836773 / R: 1270 ->1200
167 55 ALEX KONG 2.0 L 62 D 31 L 10 L 30 B D 45 L 43 MI 15412571 / R: 1186 ->1163
170 56 MARISA RICCI 2.0 H L 11 L 35 W 45 H L 40 L 42 MI 14679887 / R: 1153 ->1140
173 57 MICHAEL LU 2.0 L 7 L 36 W 42 L 51 L 35 L 53 B MI 15113330 / R: 1092 ->1079
176 58 VIRAJ MOHILE 2.0 W 31 L 2 L 41 L 23 L 49 B L 45 MI 14700365 / R: 917 -> 941
179 59 SEAN M MC CORMICK 2.0 L 41 B L 9 L 40 L 43 W 54 L 44 MI 12841036 / R: 853 -> 878
182 60 JULIA SHEN 1.5 L 33 L 34 D 45 D 42 L 24 H U MI 14579262 / R: 967 -> 984
185 61 JEZZEL FARKAS 1.5 L 32 L 3 W 54 L 47 D 42 L 30 L 37 ON 15771592 / R: 955P11-> 979P18
188 62 ASHWIN BALAJI 1.0 W 55 U U U U U U MI 15219542 / R: 1530 ->1535
191 63 THOMAS JOSEPH HOSMER 1.0 L 2 L 48 D 49 L 43 L 45 H U MI 15057092 / R: 1175 ->1125
194 64 BEN LI 1.0 L 22 D 30 L 31 D 49 L 46 L 42 L 54 MI 15006561 / R: 1163 ->1112

Extracting Pre-Ratings and Opponents

In the previous step, each player’s pre-rating is part of a longer character string. In this code block, we extract it by using a regex to match a 3 or 4 digit sequence that is preceded by a space character, and is not followed by another digit. We then add a new column to the data frame with the extracted pre-tournament rating, and remove the column containing the longer string. Additionally, each round result is a string containing both the match result and the opponent number. We use another regex to extract just the opponent for each round, store this information in 7 new columns (one for each round), and then eliminate the old round columns.

chess_filtered <- chess_filtered %>%
  mutate(
    Pre_Rating = str_extract(chess_filtered$Pre_Rating_String, "(?<=[:blank:])\\d{3,4}(?!\\d)"),
    Pre_Rating_String = NULL
  )

chess_filtered <- chess_filtered %>%
  mutate(
    Opp_1 = str_extract(chess_filtered$`Round 1`, "\\d{1,2}"),
    Opp_2 = str_extract(chess_filtered$`Round 2`, "\\d{1,2}"),
    Opp_3 = str_extract(chess_filtered$`Round 3`, "\\d{1,2}"),
    Opp_4 = str_extract(chess_filtered$`Round 4`, "\\d{1,2}"),
    Opp_5 = str_extract(chess_filtered$`Round 5`, "\\d{1,2}"),
    Opp_6 = str_extract(chess_filtered$`Round 6`, "\\d{1,2}"),
    Opp_7 = str_extract(chess_filtered$`Round 7`, "\\d{1,2}"),
    `Round 1` = NULL,
    `Round 2` = NULL,
    `Round 3` = NULL,
    `Round 4` = NULL,
    `Round 5` = NULL,
    `Round 6` = NULL,
    `Round 7` = NULL
  )

kable(chess_filtered, format = "pipe", col.names = c("Number", "Player Name", "Total Pts", "State", "Pre-Rating", "Opp 1", "Opp 2", "Opp 3", "Opp 4", "Opp 5", "Opp 6", "Opp 7"), caption = "Data Frame With Opponent Numbers", align = "clcccccccccc")
Data Frame With Opponent Numbers
Number Player Name Total Pts State Pre-Rating Opp 1 Opp 2 Opp 3 Opp 4 Opp 5 Opp 6 Opp 7
5 1 GARY HUA 6.0 ON 1794 39 21 18 14 7 12 4
8 2 DAKSHESH DARURI 6.0 MI 1553 63 58 4 17 16 20 7
11 3 ADITYA BAJAJ 6.0 MI 1384 8 61 25 21 11 13 12
14 4 PATRICK H SCHILLING 5.5 MI 1716 23 28 2 26 5 19 1
17 5 HANSHI ZUO 5.5 MI 1655 45 37 12 13 4 14 17
20 6 HANSEN SONG 5.0 OH 1686 34 29 11 35 10 27 21
23 7 GARY DEE SWATHELL 5.0 MI 1649 57 46 13 11 1 9 2
26 8 EZEKIEL HOUGHTON 5.0 MI 1641 3 32 14 9 47 28 19
29 9 STEFANO LEE 5.0 ON 1411 25 18 59 8 26 7 20
32 10 ANVIT RAO 5.0 MI 1365 16 19 55 31 6 25 18
35 11 CAMERON WILLIAM MC LEMAN 4.5 MI 1712 38 56 6 7 3 34 26
38 12 KENNETH J TACK 4.5 MI 1663 42 33 5 38 NA 1 3
41 13 TORRANCE HENRY JR 4.5 MI 1666 36 27 7 5 33 3 32
44 14 BRADLEY SHAW 4.5 MI 1610 54 44 8 1 27 5 31
47 15 ZACHARY JAMES HOUGHTON 4.5 MI 1220 19 16 30 22 54 33 38
50 16 MIKE NIKITIN 4.0 MI 1604 10 15 NA 39 2 36 NA
53 17 RONALD GRZEGORCZYK 4.0 MI 1629 48 41 26 2 23 22 5
56 18 DAVID SUNDEEN 4.0 MI 1600 47 9 1 32 19 38 10
59 19 DIPANKAR ROY 4.0 MI 1564 15 10 52 28 18 4 8
62 20 JASON ZHENG 4.0 MI 1595 40 49 23 41 28 2 9
65 21 DINH DANG BUI 4.0 ON 1563 43 1 47 3 40 39 6
68 22 EUGENE L MCCLURE 4.0 MI 1555 64 52 28 15 NA 17 40
71 23 ALAN BUI 4.0 ON 1363 4 43 20 58 17 37 46
74 24 MICHAEL R ALDRICH 4.0 MI 1229 28 47 43 25 60 44 39
77 25 LOREN SCHWIEBERT 3.5 MI 1745 9 53 3 24 34 10 47
80 26 MAX ZHU 3.5 ON 1579 49 40 17 4 9 32 11
83 27 GAURAV GIDWANI 3.5 MI 1552 51 13 46 37 14 6 NA
86 28 SOFIA ADINA STANESCU-BELLU 3.5 MI 1507 24 4 22 19 20 8 36
89 29 CHIEDOZIE OKORIE 3.5 MI 1602 50 6 38 34 52 48 NA
92 30 GEORGE AVERY JONES 3.5 ON 1522 52 64 15 55 31 61 50
95 31 RISHI SHETTY 3.5 MI 1494 58 55 64 10 30 50 14
98 32 JOSHUA PHILIP MATHEWS 3.5 ON 1441 61 8 44 18 51 26 13
101 33 JADE GE 3.5 MI 1449 60 12 50 36 13 15 51
104 34 MICHAEL JEFFERY THOMAS 3.5 MI 1399 6 60 37 29 25 11 52
107 35 JOSHUA DAVID LEE 3.5 MI 1438 46 38 56 6 57 52 48
110 36 SIDDHARTH JHA 3.5 MI 1355 13 57 51 33 NA 16 28
113 37 AMIYATOSH PWNANANDAM 3.5 MI 980 NA 5 34 27 NA 23 61
116 38 BRIAN LIU 3.0 MI 1423 11 35 29 12 NA 18 15
119 39 JOEL R HENDON 3.0 MI 1436 1 54 40 16 44 21 24
122 40 FOREST ZHANG 3.0 MI 1348 20 26 39 59 21 56 22
125 41 KYLE WILLIAM MURPHY 3.0 MI 1403 59 17 58 20 NA NA NA
128 42 JARED GE 3.0 MI 1332 12 50 57 60 61 64 56
131 43 ROBERT GLEN VASEY 3.0 MI 1283 21 23 24 63 59 46 55
134 44 JUSTIN D SCHILLING 3.0 MI 1199 NA 14 32 53 39 24 59
137 45 DEREK YAN 3.0 MI 1242 5 51 60 56 63 55 58
140 46 JACOB ALEXANDER LAVALLEY 3.0 MI 377 35 7 27 50 64 43 23
143 47 ERIC WRIGHT 2.5 MI 1362 18 24 21 61 8 51 25
146 48 DANIEL KHAIN 2.5 MI 1382 17 63 NA 52 NA 29 35
149 49 MICHAEL J MARTIN 2.5 MI 1291 26 20 63 64 58 NA NA
152 50 SHIVAM JHA 2.5 MI 1056 29 42 33 46 NA 31 30
155 51 TEJAS AYYAGARI 2.5 MI 1011 27 45 36 57 32 47 33
158 52 ETHAN GUO 2.5 MI 935 30 22 19 48 29 35 34
161 53 JOSE C YBARRA 2.0 MI 1393 NA 25 NA 44 NA 57 NA
164 54 LARRY HODGE 2.0 MI 1270 14 39 61 NA 15 59 64
167 55 ALEX KONG 2.0 MI 1186 62 31 10 30 NA 45 43
170 56 MARISA RICCI 2.0 MI 1153 NA 11 35 45 NA 40 42
173 57 MICHAEL LU 2.0 MI 1092 7 36 42 51 35 53 NA
176 58 VIRAJ MOHILE 2.0 MI 917 31 2 41 23 49 NA 45
179 59 SEAN M MC CORMICK 2.0 MI 853 41 NA 9 40 43 54 44
182 60 JULIA SHEN 1.5 MI 967 33 34 45 42 24 NA NA
185 61 JEZZEL FARKAS 1.5 ON 955 32 3 54 47 42 30 37
188 62 ASHWIN BALAJI 1.0 MI 1530 55 NA NA NA NA NA NA
191 63 THOMAS JOSEPH HOSMER 1.0 MI 1175 2 48 49 43 45 NA NA
194 64 BEN LI 1.0 MI 1163 22 30 31 49 46 42 54

Determining Opponent Ratings

The reason why we needed the opponent number for each round is that we need to calculate the average pre-tournament rating for each player’s opponents. In order to do that, we don’t actually need the number of each player’s opponent for each round, we need the pre-tournament rating of each player’s opponent for each round. In this code block, we create a new column for the rating of each player’s opponent in each round, then delete the columns with the opponent numbers.

chess_filtered$Opp_1_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_1)])
chess_filtered$Opp_2_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_2)])
chess_filtered$Opp_3_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_3)])
chess_filtered$Opp_4_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_4)])
chess_filtered$Opp_5_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_5)])
chess_filtered$Opp_6_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_6)])
chess_filtered$Opp_7_rating <- as.integer(chess_filtered$Pre_Rating[as.integer(chess_filtered$Opp_7)])

chess_filtered <- subset(chess_filtered, select = -c(6:12))

kable(chess_filtered, format = "pipe", col.names = c("Number", "Player Name", "Total Pts", "State", "Pre-Rating", "Opp 1 Rating ", "Opp 2 Rating", "Opp 3 Rating", "Opp 4 Rating", "Opp 5 Rating", "Opp 6 Rating", "Opp 7 Rating"), caption = "Data Frame With Opponent Ratings", align = "clcccccccccc")
Data Frame With Opponent Ratings
Number Player Name Total Pts State Pre-Rating Opp 1 Rating Opp 2 Rating Opp 3 Rating Opp 4 Rating Opp 5 Rating Opp 6 Rating Opp 7 Rating
5 1 GARY HUA 6.0 ON 1794 1436 1563 1600 1610 1649 1663 1716
8 2 DAKSHESH DARURI 6.0 MI 1553 1175 917 1716 1629 1604 1595 1649
11 3 ADITYA BAJAJ 6.0 MI 1384 1641 955 1745 1563 1712 1666 1663
14 4 PATRICK H SCHILLING 5.5 MI 1716 1363 1507 1553 1579 1655 1564 1794
17 5 HANSHI ZUO 5.5 MI 1655 1242 980 1663 1666 1716 1610 1629
20 6 HANSEN SONG 5.0 OH 1686 1399 1602 1712 1438 1365 1552 1563
23 7 GARY DEE SWATHELL 5.0 MI 1649 1092 377 1666 1712 1794 1411 1553
26 8 EZEKIEL HOUGHTON 5.0 MI 1641 1384 1441 1610 1411 1362 1507 1564
29 9 STEFANO LEE 5.0 ON 1411 1745 1600 853 1641 1579 1649 1595
32 10 ANVIT RAO 5.0 MI 1365 1604 1564 1186 1494 1686 1745 1600
35 11 CAMERON WILLIAM MC LEMAN 4.5 MI 1712 1423 1153 1686 1649 1384 1399 1579
38 12 KENNETH J TACK 4.5 MI 1663 1332 1449 1655 1423 NA 1794 1384
41 13 TORRANCE HENRY JR 4.5 MI 1666 1355 1552 1649 1655 1449 1384 1441
44 14 BRADLEY SHAW 4.5 MI 1610 1270 1199 1641 1794 1552 1655 1494
47 15 ZACHARY JAMES HOUGHTON 4.5 MI 1220 1564 1604 1522 1555 1270 1449 1423
50 16 MIKE NIKITIN 4.0 MI 1604 1365 1220 NA 1436 1553 1355 NA
53 17 RONALD GRZEGORCZYK 4.0 MI 1629 1382 1403 1579 1553 1363 1555 1655
56 18 DAVID SUNDEEN 4.0 MI 1600 1362 1411 1794 1441 1564 1423 1365
59 19 DIPANKAR ROY 4.0 MI 1564 1220 1365 935 1507 1600 1716 1641
62 20 JASON ZHENG 4.0 MI 1595 1348 1291 1363 1403 1507 1553 1411
65 21 DINH DANG BUI 4.0 ON 1563 1283 1794 1362 1384 1348 1436 1686
68 22 EUGENE L MCCLURE 4.0 MI 1555 1163 935 1507 1220 NA 1629 1348
71 23 ALAN BUI 4.0 ON 1363 1716 1283 1595 917 1629 980 377
74 24 MICHAEL R ALDRICH 4.0 MI 1229 1507 1362 1283 1745 967 1199 1436
77 25 LOREN SCHWIEBERT 3.5 MI 1745 1411 1393 1384 1229 1399 1365 1362
80 26 MAX ZHU 3.5 ON 1579 1291 1348 1629 1716 1411 1441 1712
83 27 GAURAV GIDWANI 3.5 MI 1552 1011 1666 377 980 1610 1686 NA
86 28 SOFIA ADINA STANESCU-BELLU 3.5 MI 1507 1229 1716 1555 1564 1595 1641 1355
89 29 CHIEDOZIE OKORIE 3.5 MI 1602 1056 1686 1423 1399 935 1382 NA
92 30 GEORGE AVERY JONES 3.5 ON 1522 935 1163 1220 1186 1494 955 1056
95 31 RISHI SHETTY 3.5 MI 1494 917 1186 1163 1365 1522 1056 1610
98 32 JOSHUA PHILIP MATHEWS 3.5 ON 1441 955 1641 1199 1600 1011 1579 1666
101 33 JADE GE 3.5 MI 1449 967 1663 1056 1355 1666 1220 1011
104 34 MICHAEL JEFFERY THOMAS 3.5 MI 1399 1686 967 980 1602 1745 1712 935
107 35 JOSHUA DAVID LEE 3.5 MI 1438 377 1423 1153 1686 1092 935 1382
110 36 SIDDHARTH JHA 3.5 MI 1355 1666 1092 1011 1449 NA 1604 1507
113 37 AMIYATOSH PWNANANDAM 3.5 MI 980 NA 1655 1399 1552 NA 1363 955
116 38 BRIAN LIU 3.0 MI 1423 1712 1438 1602 1663 NA 1600 1220
119 39 JOEL R HENDON 3.0 MI 1436 1794 1270 1348 1604 1199 1563 1229
122 40 FOREST ZHANG 3.0 MI 1348 1595 1579 1436 853 1563 1153 1555
125 41 KYLE WILLIAM MURPHY 3.0 MI 1403 853 1629 917 1595 NA NA NA
128 42 JARED GE 3.0 MI 1332 1663 1056 1092 967 955 1163 1153
131 43 ROBERT GLEN VASEY 3.0 MI 1283 1563 1363 1229 1175 853 377 1186
134 44 JUSTIN D SCHILLING 3.0 MI 1199 NA 1610 1441 1393 1436 1229 853
137 45 DEREK YAN 3.0 MI 1242 1655 1011 967 1153 1175 1186 917
140 46 JACOB ALEXANDER LAVALLEY 3.0 MI 377 1438 1649 1552 1056 1163 1283 1363
143 47 ERIC WRIGHT 2.5 MI 1362 1600 1229 1563 955 1641 1011 1745
146 48 DANIEL KHAIN 2.5 MI 1382 1629 1175 NA 935 NA 1602 1438
149 49 MICHAEL J MARTIN 2.5 MI 1291 1579 1595 1175 1163 917 NA NA
152 50 SHIVAM JHA 2.5 MI 1056 1602 1332 1449 377 NA 1494 1522
155 51 TEJAS AYYAGARI 2.5 MI 1011 1552 1242 1355 1092 1441 1362 1449
158 52 ETHAN GUO 2.5 MI 935 1522 1555 1564 1382 1602 1438 1399
161 53 JOSE C YBARRA 2.0 MI 1393 NA 1745 NA 1199 NA 1092 NA
164 54 LARRY HODGE 2.0 MI 1270 1610 1436 955 NA 1220 853 1163
167 55 ALEX KONG 2.0 MI 1186 1530 1494 1365 1522 NA 1242 1283
170 56 MARISA RICCI 2.0 MI 1153 NA 1712 1438 1242 NA 1348 1332
173 57 MICHAEL LU 2.0 MI 1092 1649 1355 1332 1011 1438 1393 NA
176 58 VIRAJ MOHILE 2.0 MI 917 1494 1553 1403 1363 1291 NA 1242
179 59 SEAN M MC CORMICK 2.0 MI 853 1403 NA 1411 1348 1283 1270 1199
182 60 JULIA SHEN 1.5 MI 967 1449 1399 1242 1332 1229 NA NA
185 61 JEZZEL FARKAS 1.5 ON 955 1441 1384 1270 1362 1332 1522 980
188 62 ASHWIN BALAJI 1.0 MI 1530 1186 NA NA NA NA NA NA
191 63 THOMAS JOSEPH HOSMER 1.0 MI 1175 1553 1382 1291 1283 1242 NA NA
194 64 BEN LI 1.0 MI 1163 1555 1522 1494 1291 377 1332 1270

Calculating Average Opponent Rating

In this code block, we calculate the average of the opponent pre-tournament ratings for each player (making sure to account for NA values), and then remove the columns with individual opponent rating data. Our data frame is complete, so we write it to a csv.

chess_filtered <- chess_filtered %>% rowwise() %>%
mutate(Opponents_Avg_Pre_Rating = mean(c_across(Opp_1_rating:Opp_7_rating), na.rm = TRUE))

chess_filtered <- subset(chess_filtered, select = -c(6:12))

write.csv(chess_filtered, "/Users/Shared/chessproject.csv", row.names = FALSE, append = FALSE)
## Warning in write.csv(chess_filtered, "/Users/Shared/chessproject.csv",
## row.names = FALSE, : attempt to set 'append' ignored
kable(chess_filtered, format = "pipe", col.names = c("Number", "Player Name", "Total Pts", "State", "Pre-Rating", "Avg Opp Rating"), caption = "Final Data Frame", align = "clcccc", digits = 0)
Final Data Frame
Number Player Name Total Pts State Pre-Rating Avg Opp Rating
1 GARY HUA 6.0 ON 1794 1605
2 DAKSHESH DARURI 6.0 MI 1553 1469
3 ADITYA BAJAJ 6.0 MI 1384 1564
4 PATRICK H SCHILLING 5.5 MI 1716 1574
5 HANSHI ZUO 5.5 MI 1655 1501
6 HANSEN SONG 5.0 OH 1686 1519
7 GARY DEE SWATHELL 5.0 MI 1649 1372
8 EZEKIEL HOUGHTON 5.0 MI 1641 1468
9 STEFANO LEE 5.0 ON 1411 1523
10 ANVIT RAO 5.0 MI 1365 1554
11 CAMERON WILLIAM MC LEMAN 4.5 MI 1712 1468
12 KENNETH J TACK 4.5 MI 1663 1506
13 TORRANCE HENRY JR 4.5 MI 1666 1498
14 BRADLEY SHAW 4.5 MI 1610 1515
15 ZACHARY JAMES HOUGHTON 4.5 MI 1220 1484
16 MIKE NIKITIN 4.0 MI 1604 1386
17 RONALD GRZEGORCZYK 4.0 MI 1629 1499
18 DAVID SUNDEEN 4.0 MI 1600 1480
19 DIPANKAR ROY 4.0 MI 1564 1426
20 JASON ZHENG 4.0 MI 1595 1411
21 DINH DANG BUI 4.0 ON 1563 1470
22 EUGENE L MCCLURE 4.0 MI 1555 1300
23 ALAN BUI 4.0 ON 1363 1214
24 MICHAEL R ALDRICH 4.0 MI 1229 1357
25 LOREN SCHWIEBERT 3.5 MI 1745 1363
26 MAX ZHU 3.5 ON 1579 1507
27 GAURAV GIDWANI 3.5 MI 1552 1222
28 SOFIA ADINA STANESCU-BELLU 3.5 MI 1507 1522
29 CHIEDOZIE OKORIE 3.5 MI 1602 1314
30 GEORGE AVERY JONES 3.5 ON 1522 1144
31 RISHI SHETTY 3.5 MI 1494 1260
32 JOSHUA PHILIP MATHEWS 3.5 ON 1441 1379
33 JADE GE 3.5 MI 1449 1277
34 MICHAEL JEFFERY THOMAS 3.5 MI 1399 1375
35 JOSHUA DAVID LEE 3.5 MI 1438 1150
36 SIDDHARTH JHA 3.5 MI 1355 1388
37 AMIYATOSH PWNANANDAM 3.5 MI 980 1385
38 BRIAN LIU 3.0 MI 1423 1539
39 JOEL R HENDON 3.0 MI 1436 1430
40 FOREST ZHANG 3.0 MI 1348 1391
41 KYLE WILLIAM MURPHY 3.0 MI 1403 1248
42 JARED GE 3.0 MI 1332 1150
43 ROBERT GLEN VASEY 3.0 MI 1283 1107
44 JUSTIN D SCHILLING 3.0 MI 1199 1327
45 DEREK YAN 3.0 MI 1242 1152
46 JACOB ALEXANDER LAVALLEY 3.0 MI 377 1358
47 ERIC WRIGHT 2.5 MI 1362 1392
48 DANIEL KHAIN 2.5 MI 1382 1356
49 MICHAEL J MARTIN 2.5 MI 1291 1286
50 SHIVAM JHA 2.5 MI 1056 1296
51 TEJAS AYYAGARI 2.5 MI 1011 1356
52 ETHAN GUO 2.5 MI 935 1495
53 JOSE C YBARRA 2.0 MI 1393 1345
54 LARRY HODGE 2.0 MI 1270 1206
55 ALEX KONG 2.0 MI 1186 1406
56 MARISA RICCI 2.0 MI 1153 1414
57 MICHAEL LU 2.0 MI 1092 1363
58 VIRAJ MOHILE 2.0 MI 917 1391
59 SEAN M MC CORMICK 2.0 MI 853 1319
60 JULIA SHEN 1.5 MI 967 1330
61 JEZZEL FARKAS 1.5 ON 955 1327
62 ASHWIN BALAJI 1.0 MI 1530 1186
63 THOMAS JOSEPH HOSMER 1.0 MI 1175 1350
64 BEN LI 1.0 MI 1163 1263

Data Investigation

In this code block we create a scatter plot with each point representing one player, comparing the pre-tournament average opponent rating for that player to the number of points they earned. We also calculate the correlation coefficient.

chess_filtered$Total_Pts <- as.numeric(chess_filtered$ 'Total Pts')
ggplot(data = chess_filtered, aes(x = Opponents_Avg_Pre_Rating, y = Total_Pts)) + 
  geom_point() + 
  geom_smooth() +
  labs(title = "Total Points vs. Average Pre-Tournament Rating of Opponents", x = "Average Pre-Tournament Rating of Opponents", y = "Total Points")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

cor(chess_filtered$Opponents_Avg_Pre_Rating, chess_filtered$Total_Pts)
## [1] 0.5505086

Findings and Recommendations

The scatter plot reveals that the chess players whose opponents had a higher average rating tended to score more points than those whose opponents had a lower average rating. This is likely because of the Swiss round pairing system used by chess tournaments: Players with better records are matched against one another, resulting in the best players facing off. Competitors whose opponents had high average ratings were likely very skilled themselves.