Read in the given text file on chess rankings, and output a clean .csv file
library(tidyr)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v dplyr 1.0.3
## v tibble 3.0.6 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## v purrr 0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
Use the read.delim function to read in the text file as a data frame. Using ‘-’ as the value for sep will eliminate the unwanted ‘—-’ lines.
raw <- as.data.frame(read.delim('https://raw.githubusercontent.com/carlisleferguson/DATA607/main/tournamentinfo.txt', header=FALSE, sep='\t'))
head(raw) %>%
kbl(caption = "Peek at the Original Text File")%>%
kable_styling(bootstrap_options = "striped")
| V1 |
|---|
| —————————————————————————————– |
| 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 | |
Let’s get rid of the unneeded “—-” lines by using grep1.
no_dashes <- as.data.frame(raw[!grepl("---",raw$V1),])
head(no_dashes)%>%
kbl(caption = "Dashes Removed")%>%
kable_styling(bootstrap_options = "striped")
| raw[!grepl(“—”, raw$V1), ] |
|---|
| 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 | |
In the current data frame, each row from the text file is split into two rows. Since there isn’t a common column to merge them on because the data is still in a one column format, the data is split into two data frames - one for the even rows and one for the odd rows.
odd <- no_dashes[seq(1, 196, 2),]
even <- no_dashes[seq(2, 196, 2),]
merged_rows <- data.frame(paste(odd, even))
head(merged_rows)%>%
kbl(caption = "Merged Rows")%>%
kable_styling(bootstrap_options = "striped")
| paste.odd..even. |
|---|
| 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 | |
The rows currently are in a one column format, and needed to be divided into their respective columns. The header names are currently in the first row of the data frame. They need to be extracted from the data frame, and the header row should be deleted from the data frame.
into_vec <- as.character(1:20)
sep <- separate(data=merged_rows,col=paste.odd..even.,into=into_vec,sep="\\|")
## Warning: Expected 20 pieces. Additional pieces discarded in 65 rows [1, 2, 3, 4,
## 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...].
## Warning: Expected 20 pieces. Missing pieces filled with `NA` in 33 rows [66, 67,
## 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, ...].
head(sep)
## 1 2 3 4 5 6 7 8
## 1 Pair Player Name Total Round Round Round Round Round
## 2 1 GARY HUA 6.0 W 39 W 21 W 18 W 14 W 7
## 3 2 DAKSHESH DARURI 6.0 W 63 W 58 L 4 W 17 W 16
## 4 3 ADITYA BAJAJ 6.0 L 8 W 61 W 25 W 21 W 11
## 5 4 PATRICK H SCHILLING 5.5 W 23 D 28 W 2 W 26 D 5
## 6 5 HANSHI ZUO 5.5 W 45 W 37 D 12 D 13 D 4
## 9 10 11 12 13 14 15
## 1 Round Round Num USCF ID / Rtg (Pre->Post) Pts 1 2
## 2 D 12 D 4 ON 15445895 / R: 1794 ->1817 N:2 W B
## 3 W 20 W 7 MI 14598900 / R: 1553 ->1663 N:2 B W
## 4 W 13 W 12 MI 14959604 / R: 1384 ->1640 N:2 W B
## 5 W 19 D 1 MI 12616049 / R: 1716 ->1744 N:2 W B
## 6 W 14 W 17 MI 14601533 / R: 1655 ->1690 N:2 B W
## 16 17 18 19 20
## 1 3 4 5 6 7
## 2 W B W B W
## 3 B W B W B
## 4 W B W B W
## 5 W B W B B
## 6 B W B W B
headers<-apply(sep[1,],2,function(x)gsub('\\s+', '',x))
head(headers)%>%
kbl(caption = "Headers")%>%
kable_styling(bootstrap_options = "striped")
| x |
|---|
| Pair |
| PlayerName |
| Total |
| Round |
| Round |
| Round |
colnames(sep) = headers
sep <- sep[-1,]
head(sep)%>%
kbl(caption = "Separated Into Columns")%>%
kable_styling(bootstrap_options = "striped")
| Pair | PlayerName | Total | Round | Round | Round | Round | Round | Round | Round | Num | USCFID/Rtg(Pre->Post) | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 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 |
| 3 | 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 |
| 4 | 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 |
| 5 | 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 |
| 6 | 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 |
| 7 | 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 |
The USCF ID / Rtg (Pre->Post) column needs special attention, as it contains three columns of information in one. Accessing the column by using the header name proved buggy due to hidden white space, so I edited the header code to remove white space from all the headers.
split_col <- data.frame(as.character(str_extract_all(sep$"USCFID/Rtg(Pre->Post)","\\d{3,}")))
split_split <- separate(data = split_col, col = as.character.str_extract_all.sep..USCFID.Rtg.Pre..Post.......d.3....., into = c("id","pre","post"), sep = ",")
head(split_split)
## id pre post
## 1 c("15445895" "1794" "1817")
## 2 c("14598900" "1553" "1663")
## 3 c("14959604" "1384" "1640")
## 4 c("12616049" "1716" "1744")
## 5 c("14601533" "1655" "1690")
## 6 c("15055204" "1686" "1687")
sep$'USCF ID' <- as.character(str_extract_all(split_split$id,"[[:digit:]]{1,}"))
sep$'Rtg Pre' <- as.character(str_extract_all(split_split$pre,"[[:digit:]]{1,}"))
sep$'Rtg Post' <- as.character(str_extract_all(split_split$post,"[[:digit:]]{1,}"))
head(sep)%>%
kbl(caption = "All Columns Are Split")%>%
kable_styling(bootstrap_options = "striped")
| Pair | PlayerName | Total | Round | Round | Round | Round | Round | Round | Round | Num | USCFID/Rtg(Pre->Post) | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 | USCF ID | Rtg Pre | Rtg Post | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 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 | 15445895 | 1794 | 1817 |
| 3 | 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 | 14598900 | 1553 | 1663 |
| 4 | 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 | 14959604 | 1384 | 1640 |
| 5 | 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 | 12616049 | 1716 | 1744 |
| 6 | 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 | 14601533 | 1655 | 1690 |
| 7 | 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 | 15055204 | 1686 | 1687 |
The last step was to remove the original combined column since the information is now stored in separate columns.
drop <- c("USCFID/Rtg(Pre->Post)")
almost_final = as.data.frame(sep[,!(names(sep) %in% drop)])
Now that all the data is stored in separate columns, the data set can now be pared down to the information we’re looking for: Player’s Name, Player’s State, Total Number of Points, Player’s Pre-Rating, and Average Pre Chess Rating of Opponents. The first step is to calculate the Average Pre Chess Rating of Opponents, since that’s the only value that’s not currently in the table. To start off, the parse_number function is used to remove any characters from each of the round categories.
almost_final$Round <- parse_number(almost_final$Round)
## Warning: 4 parsing failures.
## row col expected actual
## 37 -- a number B
## 44 -- a number B
## 53 -- a number H
## 56 -- a number H
almost_final$Round.1 <- parse_number(almost_final$Round.1)
## Warning: 2 parsing failures.
## row col expected actual
## 59 -- a number B
## 62 -- a number U
almost_final$Round.2 <- parse_number(almost_final$Round.2)
## Warning: 4 parsing failures.
## row col expected actual
## 16 -- a number H
## 48 -- a number H
## 53 -- a number H
## 62 -- a number U
almost_final$Round.3 <- parse_number(almost_final$Round.3)
## Warning: 2 parsing failures.
## row col expected actual
## 54 -- a number B
## 62 -- a number U
almost_final$Round.4 <- parse_number(almost_final$Round.4)
## Warning: 12 parsing failures.
## row col expected actual
## 12 -- a number H
## 22 -- a number H
## 36 -- a number H
## 37 -- a number H
## 38 -- a number H
## ... ... ........ ......
## See problems(...) for more details.
almost_final$Round.5 <- parse_number(almost_final$Round.5)
## Warning: 6 parsing failures.
## row col expected actual
## 41 -- a number U
## 49 -- a number H
## 58 -- a number B
## 60 -- a number H
## 62 -- a number U
## ... ... ........ ......
## See problems(...) for more details.
almost_final$Round.6 <- parse_number(almost_final$Round.6)
## Warning: 10 parsing failures.
## row col expected actual
## 16 -- a number U
## 27 -- a number U
## 29 -- a number U
## 41 -- a number U
## 49 -- a number U
## ... ... ........ ......
## See problems(...) for more details.
head(almost_final)%>%
kbl(caption = "Parsed Opponents")%>%
kable_styling(bootstrap_options = "striped")
| Pair | PlayerName | Total | Round | Round.1 | Round.2 | Round.3 | Round.4 | Round.5 | Round.6 | Num | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 | USCF ID | Rtg Pre | Rtg Post | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | GARY HUA | 6.0 | 39 | 21 | 18 | 14 | 7 | 12 | 4 | ON | N:2 | W | B | W | B | W | B | W | 15445895 | 1794 | 1817 |
| 3 | 2 | DAKSHESH DARURI | 6.0 | 63 | 58 | 4 | 17 | 16 | 20 | 7 | MI | N:2 | B | W | B | W | B | W | B | 14598900 | 1553 | 1663 |
| 4 | 3 | ADITYA BAJAJ | 6.0 | 8 | 61 | 25 | 21 | 11 | 13 | 12 | MI | N:2 | W | B | W | B | W | B | W | 14959604 | 1384 | 1640 |
| 5 | 4 | PATRICK H SCHILLING | 5.5 | 23 | 28 | 2 | 26 | 5 | 19 | 1 | MI | N:2 | W | B | W | B | W | B | B | 12616049 | 1716 | 1744 |
| 6 | 5 | HANSHI ZUO | 5.5 | 45 | 37 | 12 | 13 | 4 | 14 | 17 | MI | N:2 | B | W | B | W | B | W | B | 14601533 | 1655 | 1690 |
| 7 | 6 | HANSEN SONG | 5.0 | 34 | 29 | 11 | 35 | 10 | 27 | 21 | OH | N:3 | W | B | W | B | B | W | B | 15055204 | 1686 | 1687 |
Next, the player number in each round category is replaced with the opponent’s pre-game ELO score. The pre-score is also cast to numeric so calculations can be done on it later.
almost_final$"Rtg Pre" <- as.numeric(almost_final$"Rtg Pre")
for (i in 1:97) {
for (j in 4:10) {
if (!is.na(almost_final[i,j])) {
almost_final[i,j] <- as.numeric(almost_final[almost_final[i,j],21])
}
}
}
head(almost_final)%>%
kbl(caption = "Opponent's ELO Added")%>%
kable_styling(bootstrap_options = "striped")
| Pair | PlayerName | Total | Round | Round.1 | Round.2 | Round.3 | Round.4 | Round.5 | Round.6 | Num | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 | USCF ID | Rtg Pre | Rtg Post | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | GARY HUA | 6.0 | 1436 | 1563 | 1600 | 1610 | 1649 | 1663 | 1716 | ON | N:2 | W | B | W | B | W | B | W | 15445895 | 1794 | 1817 |
| 3 | 2 | DAKSHESH DARURI | 6.0 | 1175 | 917 | 1716 | 1629 | 1604 | 1595 | 1649 | MI | N:2 | B | W | B | W | B | W | B | 14598900 | 1553 | 1663 |
| 4 | 3 | ADITYA BAJAJ | 6.0 | 1641 | 955 | 1745 | 1563 | 1712 | 1666 | 1663 | MI | N:2 | W | B | W | B | W | B | W | 14959604 | 1384 | 1640 |
| 5 | 4 | PATRICK H SCHILLING | 5.5 | 1363 | 1507 | 1553 | 1579 | 1655 | 1564 | 1794 | MI | N:2 | W | B | W | B | W | B | B | 12616049 | 1716 | 1744 |
| 6 | 5 | HANSHI ZUO | 5.5 | 1242 | 980 | 1663 | 1666 | 1716 | 1610 | 1629 | MI | N:2 | B | W | B | W | B | W | B | 14601533 | 1655 | 1690 |
| 7 | 6 | HANSEN SONG | 5.0 | 1399 | 1602 | 1712 | 1438 | 1365 | 1552 | 1563 | OH | N:3 | W | B | W | B | B | W | B | 15055204 | 1686 | 1687 |
Lastly, the average of each opponent’s ELO score is computed.
almost_final$Avg <- round(rowMeans(almost_final[,4:10], na.rm = TRUE), 0)
head(almost_final)%>%
kbl(caption = "Average Opponent ELO Included")%>%
kable_styling(bootstrap_options = "striped")
| Pair | PlayerName | Total | Round | Round.1 | Round.2 | Round.3 | Round.4 | Round.5 | Round.6 | Num | Pts | 1 | 2 | 3 | 4 | 5 | 6 | 7 | USCF ID | Rtg Pre | Rtg Post | Avg | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | GARY HUA | 6.0 | 1436 | 1563 | 1600 | 1610 | 1649 | 1663 | 1716 | ON | N:2 | W | B | W | B | W | B | W | 15445895 | 1794 | 1817 | 1605 |
| 3 | 2 | DAKSHESH DARURI | 6.0 | 1175 | 917 | 1716 | 1629 | 1604 | 1595 | 1649 | MI | N:2 | B | W | B | W | B | W | B | 14598900 | 1553 | 1663 | 1469 |
| 4 | 3 | ADITYA BAJAJ | 6.0 | 1641 | 955 | 1745 | 1563 | 1712 | 1666 | 1663 | MI | N:2 | W | B | W | B | W | B | W | 14959604 | 1384 | 1640 | 1564 |
| 5 | 4 | PATRICK H SCHILLING | 5.5 | 1363 | 1507 | 1553 | 1579 | 1655 | 1564 | 1794 | MI | N:2 | W | B | W | B | W | B | B | 12616049 | 1716 | 1744 | 1574 |
| 6 | 5 | HANSHI ZUO | 5.5 | 1242 | 980 | 1663 | 1666 | 1716 | 1610 | 1629 | MI | N:2 | B | W | B | W | B | W | B | 14601533 | 1655 | 1690 | 1501 |
| 7 | 6 | HANSEN SONG | 5.0 | 1399 | 1602 | 1712 | 1438 | 1365 | 1552 | 1563 | OH | N:3 | W | B | W | B | B | W | B | 15055204 | 1686 | 1687 | 1519 |
final <- subset(almost_final, select=c("PlayerName", "Num", "Total", "Rtg Pre", "Avg"))
final %>%
rename(
"Player's Name" = PlayerName,
"Player's State" = Num,
"Total Number of Points" = Total,
"Player's Pre-Rating" = "Rtg Pre",
"Average Pre Chess Rating of Opponents" = Avg
)
## Player's Name Player's State Total Number of Points
## 2 GARY HUA ON 6.0
## 3 DAKSHESH DARURI MI 6.0
## 4 ADITYA BAJAJ MI 6.0
## 5 PATRICK H SCHILLING MI 5.5
## 6 HANSHI ZUO MI 5.5
## 7 HANSEN SONG OH 5.0
## 8 GARY DEE SWATHELL MI 5.0
## 9 EZEKIEL HOUGHTON MI 5.0
## 10 STEFANO LEE ON 5.0
## 11 ANVIT RAO MI 5.0
## 12 CAMERON WILLIAM MC LEMAN MI 4.5
## 13 KENNETH J TACK MI 4.5
## 14 TORRANCE HENRY JR MI 4.5
## 15 BRADLEY SHAW MI 4.5
## 16 ZACHARY JAMES HOUGHTON MI 4.5
## 17 MIKE NIKITIN MI 4.0
## 18 RONALD GRZEGORCZYK MI 4.0
## 19 DAVID SUNDEEN MI 4.0
## 20 DIPANKAR ROY MI 4.0
## 21 JASON ZHENG MI 4.0
## 22 DINH DANG BUI ON 4.0
## 23 EUGENE L MCCLURE MI 4.0
## 24 ALAN BUI ON 4.0
## 25 MICHAEL R ALDRICH MI 4.0
## 26 LOREN SCHWIEBERT MI 3.5
## 27 MAX ZHU ON 3.5
## 28 GAURAV GIDWANI MI 3.5
## 29 SOFIA ADINA STANESCU-BELLU MI 3.5
## 30 CHIEDOZIE OKORIE MI 3.5
## 31 GEORGE AVERY JONES ON 3.5
## 32 RISHI SHETTY MI 3.5
## 33 JOSHUA PHILIP MATHEWS ON 3.5
## 34 JADE GE MI 3.5
## 35 MICHAEL JEFFERY THOMAS MI 3.5
## 36 JOSHUA DAVID LEE MI 3.5
## 37 SIDDHARTH JHA MI 3.5
## 38 AMIYATOSH PWNANANDAM MI 3.5
## 39 BRIAN LIU MI 3.0
## 40 JOEL R HENDON MI 3.0
## 41 FOREST ZHANG MI 3.0
## 42 KYLE WILLIAM MURPHY MI 3.0
## 43 JARED GE MI 3.0
## 44 ROBERT GLEN VASEY MI 3.0
## 45 JUSTIN D SCHILLING MI 3.0
## 46 DEREK YAN MI 3.0
## 47 JACOB ALEXANDER LAVALLEY MI 3.0
## 48 ERIC WRIGHT MI 2.5
## 49 DANIEL KHAIN MI 2.5
## 50 MICHAEL J MARTIN MI 2.5
## 51 SHIVAM JHA MI 2.5
## 52 TEJAS AYYAGARI MI 2.5
## 53 ETHAN GUO MI 2.5
## 54 JOSE C YBARRA MI 2.0
## 55 LARRY HODGE MI 2.0
## 56 ALEX KONG MI 2.0
## 57 MARISA RICCI MI 2.0
## 58 MICHAEL LU MI 2.0
## 59 VIRAJ MOHILE MI 2.0
## 60 SEAN M MC CORMICK MI 2.0
## 61 JULIA SHEN MI 1.5
## 62 JEZZEL FARKAS ON 1.5
## 63 ASHWIN BALAJI MI 1.0
## 64 THOMAS JOSEPH HOSMER MI 1.0
## 65 BEN LI MI 1.0
## 66 <NA> <NA> <NA>
## 67 <NA> <NA> <NA>
## 68 <NA> <NA> <NA>
## 69 <NA> <NA> <NA>
## 70 <NA> <NA> <NA>
## 71 <NA> <NA> <NA>
## 72 <NA> <NA> <NA>
## 73 <NA> <NA> <NA>
## 74 <NA> <NA> <NA>
## 75 <NA> <NA> <NA>
## 76 <NA> <NA> <NA>
## 77 <NA> <NA> <NA>
## 78 <NA> <NA> <NA>
## 79 <NA> <NA> <NA>
## 80 <NA> <NA> <NA>
## 81 <NA> <NA> <NA>
## 82 <NA> <NA> <NA>
## 83 <NA> <NA> <NA>
## 84 <NA> <NA> <NA>
## 85 <NA> <NA> <NA>
## 86 <NA> <NA> <NA>
## 87 <NA> <NA> <NA>
## 88 <NA> <NA> <NA>
## 89 <NA> <NA> <NA>
## 90 <NA> <NA> <NA>
## 91 <NA> <NA> <NA>
## 92 <NA> <NA> <NA>
## 93 <NA> <NA> <NA>
## 94 <NA> <NA> <NA>
## 95 <NA> <NA> <NA>
## 96 <NA> <NA> <NA>
## 97 <NA> <NA> <NA>
## 98 <NA> <NA> <NA>
## Player's Pre-Rating Average Pre Chess Rating of Opponents
## 2 1794 1605
## 3 1553 1469
## 4 1384 1564
## 5 1716 1574
## 6 1655 1501
## 7 1686 1519
## 8 1649 1372
## 9 1641 1468
## 10 1411 1523
## 11 1365 1554
## 12 1712 1468
## 13 1663 1506
## 14 1666 1498
## 15 1610 1515
## 16 1220 1484
## 17 1604 1386
## 18 1629 1499
## 19 1600 1480
## 20 1564 1426
## 21 1595 1411
## 22 1563 1470
## 23 1555 1300
## 24 1363 1214
## 25 1229 1357
## 26 1745 1363
## 27 1579 1507
## 28 1552 1222
## 29 1507 1522
## 30 1602 1314
## 31 1522 1144
## 32 1494 1260
## 33 1441 1379
## 34 1449 1277
## 35 1399 1375
## 36 1438 1150
## 37 1355 1388
## 38 980 1385
## 39 1423 1539
## 40 1436 1430
## 41 1348 1391
## 42 1403 1248
## 43 1332 1150
## 44 1283 1107
## 45 1199 1327
## 46 1242 1152
## 47 377 1358
## 48 1362 1392
## 49 1382 1356
## 50 1291 1286
## 51 1056 1296
## 52 1011 1356
## 53 935 1495
## 54 1393 1345
## 55 1270 1206
## 56 1186 1406
## 57 1153 1414
## 58 1092 1363
## 59 917 1391
## 60 853 1319
## 61 967 1330
## 62 955 1327
## 63 1530 1186
## 64 1175 1350
## 65 1163 1263
## 66 NA NaN
## 67 NA NaN
## 68 NA NaN
## 69 NA NaN
## 70 NA NaN
## 71 NA NaN
## 72 NA NaN
## 73 NA NaN
## 74 NA NaN
## 75 NA NaN
## 76 NA NaN
## 77 NA NaN
## 78 NA NaN
## 79 NA NaN
## 80 NA NaN
## 81 NA NaN
## 82 NA NaN
## 83 NA NaN
## 84 NA NaN
## 85 NA NaN
## 86 NA NaN
## 87 NA NaN
## 88 NA NaN
## 89 NA NaN
## 90 NA NaN
## 91 NA NaN
## 92 NA NaN
## 93 NA NaN
## 94 NA NaN
## 95 NA NaN
## 96 NA NaN
## 97 NA NaN
## 98 NA NaN
final <- na.omit(final)
final %>%
kbl(caption = "Final Table")%>%
kable_styling(bootstrap_options = "striped")
| PlayerName | Num | Total | Rtg Pre | Avg | |
|---|---|---|---|---|---|
| 2 | GARY HUA | ON | 6.0 | 1794 | 1605 |
| 3 | DAKSHESH DARURI | MI | 6.0 | 1553 | 1469 |
| 4 | ADITYA BAJAJ | MI | 6.0 | 1384 | 1564 |
| 5 | PATRICK H SCHILLING | MI | 5.5 | 1716 | 1574 |
| 6 | HANSHI ZUO | MI | 5.5 | 1655 | 1501 |
| 7 | HANSEN SONG | OH | 5.0 | 1686 | 1519 |
| 8 | GARY DEE SWATHELL | MI | 5.0 | 1649 | 1372 |
| 9 | EZEKIEL HOUGHTON | MI | 5.0 | 1641 | 1468 |
| 10 | STEFANO LEE | ON | 5.0 | 1411 | 1523 |
| 11 | ANVIT RAO | MI | 5.0 | 1365 | 1554 |
| 12 | CAMERON WILLIAM MC LEMAN | MI | 4.5 | 1712 | 1468 |
| 13 | KENNETH J TACK | MI | 4.5 | 1663 | 1506 |
| 14 | TORRANCE HENRY JR | MI | 4.5 | 1666 | 1498 |
| 15 | BRADLEY SHAW | MI | 4.5 | 1610 | 1515 |
| 16 | ZACHARY JAMES HOUGHTON | MI | 4.5 | 1220 | 1484 |
| 17 | MIKE NIKITIN | MI | 4.0 | 1604 | 1386 |
| 18 | RONALD GRZEGORCZYK | MI | 4.0 | 1629 | 1499 |
| 19 | DAVID SUNDEEN | MI | 4.0 | 1600 | 1480 |
| 20 | DIPANKAR ROY | MI | 4.0 | 1564 | 1426 |
| 21 | JASON ZHENG | MI | 4.0 | 1595 | 1411 |
| 22 | DINH DANG BUI | ON | 4.0 | 1563 | 1470 |
| 23 | EUGENE L MCCLURE | MI | 4.0 | 1555 | 1300 |
| 24 | ALAN BUI | ON | 4.0 | 1363 | 1214 |
| 25 | MICHAEL R ALDRICH | MI | 4.0 | 1229 | 1357 |
| 26 | LOREN SCHWIEBERT | MI | 3.5 | 1745 | 1363 |
| 27 | MAX ZHU | ON | 3.5 | 1579 | 1507 |
| 28 | GAURAV GIDWANI | MI | 3.5 | 1552 | 1222 |
| 29 | SOFIA ADINA STANESCU-BELLU | MI | 3.5 | 1507 | 1522 |
| 30 | CHIEDOZIE OKORIE | MI | 3.5 | 1602 | 1314 |
| 31 | GEORGE AVERY JONES | ON | 3.5 | 1522 | 1144 |
| 32 | RISHI SHETTY | MI | 3.5 | 1494 | 1260 |
| 33 | JOSHUA PHILIP MATHEWS | ON | 3.5 | 1441 | 1379 |
| 34 | JADE GE | MI | 3.5 | 1449 | 1277 |
| 35 | MICHAEL JEFFERY THOMAS | MI | 3.5 | 1399 | 1375 |
| 36 | JOSHUA DAVID LEE | MI | 3.5 | 1438 | 1150 |
| 37 | SIDDHARTH JHA | MI | 3.5 | 1355 | 1388 |
| 38 | AMIYATOSH PWNANANDAM | MI | 3.5 | 980 | 1385 |
| 39 | BRIAN LIU | MI | 3.0 | 1423 | 1539 |
| 40 | JOEL R HENDON | MI | 3.0 | 1436 | 1430 |
| 41 | FOREST ZHANG | MI | 3.0 | 1348 | 1391 |
| 42 | KYLE WILLIAM MURPHY | MI | 3.0 | 1403 | 1248 |
| 43 | JARED GE | MI | 3.0 | 1332 | 1150 |
| 44 | ROBERT GLEN VASEY | MI | 3.0 | 1283 | 1107 |
| 45 | JUSTIN D SCHILLING | MI | 3.0 | 1199 | 1327 |
| 46 | DEREK YAN | MI | 3.0 | 1242 | 1152 |
| 47 | JACOB ALEXANDER LAVALLEY | MI | 3.0 | 377 | 1358 |
| 48 | ERIC WRIGHT | MI | 2.5 | 1362 | 1392 |
| 49 | DANIEL KHAIN | MI | 2.5 | 1382 | 1356 |
| 50 | MICHAEL J MARTIN | MI | 2.5 | 1291 | 1286 |
| 51 | SHIVAM JHA | MI | 2.5 | 1056 | 1296 |
| 52 | TEJAS AYYAGARI | MI | 2.5 | 1011 | 1356 |
| 53 | ETHAN GUO | MI | 2.5 | 935 | 1495 |
| 54 | JOSE C YBARRA | MI | 2.0 | 1393 | 1345 |
| 55 | LARRY HODGE | MI | 2.0 | 1270 | 1206 |
| 56 | ALEX KONG | MI | 2.0 | 1186 | 1406 |
| 57 | MARISA RICCI | MI | 2.0 | 1153 | 1414 |
| 58 | MICHAEL LU | MI | 2.0 | 1092 | 1363 |
| 59 | VIRAJ MOHILE | MI | 2.0 | 917 | 1391 |
| 60 | SEAN M MC CORMICK | MI | 2.0 | 853 | 1319 |
| 61 | JULIA SHEN | MI | 1.5 | 967 | 1330 |
| 62 | JEZZEL FARKAS | ON | 1.5 | 955 | 1327 |
| 63 | ASHWIN BALAJI | MI | 1.0 | 1530 | 1186 |
| 64 | THOMAS JOSEPH HOSMER | MI | 1.0 | 1175 | 1350 |
| 65 | BEN LI | MI | 1.0 | 1163 | 1263 |
write.csv(final, '607_Project1.csv', row.names = FALSE)