Project Objective

Read in the given text file on chess rankings, and output a clean .csv file

Libraries

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

Step 1: Load Data

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")
Peek at the Original Text File
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 |

Step 2: Clean Up the Data Frame

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")
Dashes Removed
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 |

Step 3: Rearranging Rows

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")
Merged Rows
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 |

Step 4: Divide Rows and Extract Headers

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")
Headers
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")
Separated Into Columns
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")
All Columns Are Split
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)])

Step 5: Cleaning Up the Table

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")
Parsed Opponents
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")
Opponent’s ELO Added
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")
Average Opponent ELO Included
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

Step 6: Selecting the Final Columns and Exporting to .csv

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")
Final Table
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)