In this project, we’re given a text file with chess tournament results where the information has some structure. Our job was to create an R Markdown file that generates a .CSV file (that could for example be imported into a SQL database) with the following information for all of the players: Player’s Name, Player’s State, Total Number of Points, Player’s Pre-Rating, and Average Pre Chess Rating of Opponents. Illustration, for the first player, the information would be: Gary Hua, ON, 6.0, 1794, 1605
library(readr)
library(stringr)
df1<-read.table(file="https://raw.githubusercontent.com/nnaemeka-git/global-datasets/main/tournamentinfo.txt",stringsAsFactors = FALSE, sep=",",skip=4)
df2 <- df1$V1
df2 <- str_replace_all(df2, pattern = "\\s+", replacement = " " )
df2 <- str_remove_all(df2, pattern = "-")
To match Players Names
names <- unlist(str_match_all(df1, " [A-Za-z]{1,}\\s*[A-Za-z.,-]{1,}\\s*[A-Za-z.,-]{1,}\\s?"))
names
## [1] " GARY HUA " " DAKSHESH DARURI "
## [3] " ADITYA BAJAJ " " PATRICK H SCHILLING "
## [5] " HANSHI ZUO " " HANSEN SONG "
## [7] " GARY DEE SWATHELL " " EZEKIEL HOUGHTON "
## [9] " STEFANO LEE " " ANVIT RAO "
## [11] " CAMERON WILLIAM MC " " KENNETH J TACK "
## [13] " TORRANCE HENRY JR " " BRADLEY SHAW "
## [15] " ZACHARY JAMES HOUGHTON " " MIKE NIKITIN "
## [17] " RONALD GRZEGORCZYK " " DAVID SUNDEEN "
## [19] " DIPANKAR ROY " " JASON ZHENG "
## [21] " DINH DANG BUI " " EUGENE L MCCLURE "
## [23] " ALAN BUI " " MICHAEL R ALDRICH "
## [25] " LOREN SCHWIEBERT " " MAX ZHU "
## [27] " GAURAV GIDWANI " " SOFIA ADINA STANESCU-BELLU "
## [29] " CHIEDOZIE OKORIE " " GEORGE AVERY JONES "
## [31] " RISHI SHETTY " " JOSHUA PHILIP MATHEWS "
## [33] " JADE GE " " MICHAEL JEFFERY THOMAS "
## [35] " JOSHUA DAVID LEE " " SIDDHARTH JHA "
## [37] " AMIYATOSH PWNANANDAM " " BRIAN LIU "
## [39] " JOEL R HENDON " " FOREST ZHANG "
## [41] " KYLE WILLIAM MURPHY " " JARED GE "
## [43] " ROBERT GLEN VASEY " " JUSTIN D SCHILLING "
## [45] " DEREK YAN " " JACOB ALEXANDER LAVALLEY "
## [47] " ERIC WRIGHT " " DANIEL KHAIN "
## [49] " MICHAEL J MARTIN " " SHIVAM JHA "
## [51] " TEJAS AYYAGARI " " ETHAN GUO "
## [53] " JOSE C YBARRA " " LARRY HODGE "
## [55] " ALEX KONG " " MARISA RICCI "
## [57] " MICHAEL LU " " VIRAJ MOHILE "
## [59] " SEAN M MC " " JULIA SHEN "
## [61] " JEZZEL FARKAS " " ASHWIN BALAJI "
## [63] " THOMAS JOSEPH HOSMER " " BEN LI "
To match the names of the States
state <- unlist(str_match_all(df1, " [A-Za-z]{2}\\s\\|"))
state <-str_remove_all(state,"\\|")
state
## [1] " ON " " MI " " MI " " MI " " MI " " OH " " MI " " MI " " ON " " MI "
## [11] " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI "
## [21] " ON " " MI " " ON " " MI " " MI " " ON " " MI " " MI " " MI " " ON "
## [31] " MI " " ON " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI "
## [41] " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI "
## [51] " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI " " MI "
## [61] " ON " " MI " " MI " " MI "
To match the Player Points
pts <- unlist(str_match_all(df1,"\\|\\d+.."))
#To remove pipe
pts <-str_remove_all(pts,"\\|")
pts
## [1] "6.0" "6.0" "6.0" "5.5" "5.5" "5.0" "5.0" "5.0" "5.0" "5.0" "4.5" "4.5"
## [13] "4.5" "4.5" "4.5" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0"
## [25] "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5"
## [37] "3.5" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "2.5" "2.5"
## [49] "2.5" "2.5" "2.5" "2.5" "2.0" "2.0" "2.0" "2.0" "2.0" "2.0" "2.0" "1.5"
## [61] "1.5" "1.0" "1.0" "1.0"
To match the pre-rating scores
Pre_rate <-unlist(str_match_all(df1,"R.\\s.\\d+"))
Pre_rate <-as.numeric(str_remove_all(Pre_rate,'R:'))
# Convert into a dataframe
Pre_rate<-data.frame(Pre_rate)
colnames(Pre_rate)<-"rating"
index<-data.frame(as.numeric(row.names(Pre_rate)))
colnames(index)<-"Index"
pre_rate_df <- data.frame(index,Pre_rate)
head(pre_rate_df)
## Index rating
## 1 1 1794
## 2 2 1553
## 3 3 1384
## 4 4 1716
## 5 5 1655
## 6 6 1686
To extract the number of games played and the opponents’ numbers
num_game <- unlist(str_extract_all(df2,"\\|[0-9].*"))
num_game <- unlist(str_replace_all(num_game, "\\|[BUXH] ", replacement = "\\|R 0"))
#To remove the first part containing the total points
oppon <- unlist(str_remove_all(num_game, pattern = "\\|\\d\\.\\d\\s"))
#To remove the alphabets and the pipe
oppone <- unlist(str_remove_all(oppon, pattern = "[:alpha:]\\|"))
oppone <- as.numeric(unlist(str_extract_all(oppone, pattern = "[:digit:]{1,2}")))
head(oppone)
## [1] 39 21 18 14 7 12
col_names=c("O1","O2","O3","O4","O5","O6","O7")
op_matr <- as.data.frame(matrix(oppone,byrow=TRUE,ncol=7,))
colnames(op_matr)<-col_names
op_matr
## O1 O2 O3 O4 O5 O6 O7
## 1 39 21 18 14 7 12 4
## 2 63 58 4 17 16 20 7
## 3 8 61 25 21 11 13 12
## 4 23 28 2 26 5 19 1
## 5 45 37 12 13 4 14 17
## 6 34 29 11 35 10 27 21
## 7 57 46 13 11 1 9 2
## 8 3 32 14 9 47 28 19
## 9 25 18 59 8 26 7 20
## 10 16 19 55 31 6 25 18
## 11 38 56 6 7 3 34 26
## 12 42 33 5 38 0 1 3
## 13 36 27 7 5 33 3 32
## 14 54 44 8 1 27 5 31
## 15 19 16 30 22 54 33 38
## 16 10 15 0 39 2 36 0
## 17 48 41 26 2 23 22 5
## 18 47 9 1 32 19 38 10
## 19 15 10 52 28 18 4 8
## 20 40 49 23 41 28 2 9
## 21 43 1 47 3 40 39 6
## 22 64 52 28 15 0 17 40
## 23 4 43 20 58 17 37 46
## 24 28 47 43 25 60 44 39
## 25 9 53 3 24 34 10 47
## 26 49 40 17 4 9 32 11
## 27 51 13 46 37 14 6 0
## 28 24 4 22 19 20 8 36
## 29 50 6 38 34 52 48 0
## 30 52 64 15 55 31 61 50
## 31 58 55 64 10 30 50 14
## 32 61 8 44 18 51 26 13
## 33 60 12 50 36 13 15 51
## 34 6 60 37 29 25 11 52
## 35 46 38 56 6 57 52 48
## 36 13 57 51 33 0 16 28
## 37 0 5 34 27 0 23 61
## 38 11 35 29 12 0 18 15
## 39 1 54 40 16 44 21 24
## 40 20 26 39 59 21 56 22
## 41 59 17 58 20 0 0 0
## 42 12 50 57 60 61 64 56
## 43 21 23 24 63 59 46 55
## 44 0 14 32 53 39 24 59
## 45 5 51 60 56 63 55 58
## 46 35 7 27 50 64 43 23
## 47 18 24 21 61 8 51 25
## 48 17 63 0 52 0 29 35
## 49 26 20 63 64 58 0 0
## 50 29 42 33 46 0 31 30
## 51 27 45 36 57 32 47 33
## 52 30 22 19 48 29 35 34
## 53 0 25 0 44 0 57 0
## 54 14 39 61 0 15 59 64
## 55 62 31 10 30 0 45 43
## 56 0 11 35 45 0 40 42
## 57 7 36 42 51 35 53 0
## 58 31 2 41 23 49 0 45
## 59 41 0 9 40 43 54 44
## 60 33 34 45 42 24 0 0
## 61 32 3 54 47 42 30 37
## 62 55 0 0 0 0 0 0
## 63 2 48 49 43 45 0 0
## 64 22 30 31 49 46 42 54
#nexted forloop does it better
for (row in 1:nrow(op_matr)){
for (col in 1:ncol(op_matr)){
if (op_matr[row,col] != 0){
op_matr[row,col] = pre_rate_df$rating[op_matr[row,col]]
} else {
op_matr[row,col] = NA
}
}
}
op_matr
## O1 O2 O3 O4 O5 O6 O7
## 1 1436 1563 1600 1610 1649 1663 1716
## 2 1175 917 1716 1629 1604 1595 1649
## 3 1641 955 1745 1563 1712 1666 1663
## 4 1363 1507 1553 1579 1655 1564 1794
## 5 1242 980 1663 1666 1716 1610 1629
## 6 1399 1602 1712 1438 1365 1552 1563
## 7 1092 377 1666 1712 1794 1411 1553
## 8 1384 1441 1610 1411 1362 1507 1564
## 9 1745 1600 853 1641 1579 1649 1595
## 10 1604 1564 1186 1494 1686 1745 1600
## 11 1423 1153 1686 1649 1384 1399 1579
## 12 1332 1449 1655 1423 NA 1794 1384
## 13 1355 1552 1649 1655 1449 1384 1441
## 14 1270 1199 1641 1794 1552 1655 1494
## 15 1564 1604 1522 1555 1270 1449 1423
## 16 1365 1220 NA 1436 1553 1355 NA
## 17 1382 1403 1579 1553 1363 1555 1655
## 18 1362 1411 1794 1441 1564 1423 1365
## 19 1220 1365 935 1507 1600 1716 1641
## 20 1348 1291 1363 1403 1507 1553 1411
## 21 1283 1794 1362 1384 1348 1436 1686
## 22 1163 935 1507 1220 NA 1629 1348
## 23 1716 1283 1595 917 1629 980 377
## 24 1507 1362 1283 1745 967 1199 1436
## 25 1411 1393 1384 1229 1399 1365 1362
## 26 1291 1348 1629 1716 1411 1441 1712
## 27 1011 1666 377 980 1610 1686 NA
## 28 1229 1716 1555 1564 1595 1641 1355
## 29 1056 1686 1423 1399 935 1382 NA
## 30 935 1163 1220 1186 1494 955 1056
## 31 917 1186 1163 1365 1522 1056 1610
## 32 955 1641 1199 1600 1011 1579 1666
## 33 967 1663 1056 1355 1666 1220 1011
## 34 1686 967 980 1602 1745 1712 935
## 35 377 1423 1153 1686 1092 935 1382
## 36 1666 1092 1011 1449 NA 1604 1507
## 37 NA 1655 1399 1552 NA 1363 955
## 38 1712 1438 1602 1663 NA 1600 1220
## 39 1794 1270 1348 1604 1199 1563 1229
## 40 1595 1579 1436 853 1563 1153 1555
## 41 853 1629 917 1595 NA NA NA
## 42 1663 1056 1092 967 955 1163 1153
## 43 1563 1363 1229 1175 853 377 1186
## 44 NA 1610 1441 1393 1436 1229 853
## 45 1655 1011 967 1153 1175 1186 917
## 46 1438 1649 1552 1056 1163 1283 1363
## 47 1600 1229 1563 955 1641 1011 1745
## 48 1629 1175 NA 935 NA 1602 1438
## 49 1579 1595 1175 1163 917 NA NA
## 50 1602 1332 1449 377 NA 1494 1522
## 51 1552 1242 1355 1092 1441 1362 1449
## 52 1522 1555 1564 1382 1602 1438 1399
## 53 NA 1745 NA 1199 NA 1092 NA
## 54 1610 1436 955 NA 1220 853 1163
## 55 1530 1494 1365 1522 NA 1242 1283
## 56 NA 1712 1438 1242 NA 1348 1332
## 57 1649 1355 1332 1011 1438 1393 NA
## 58 1494 1553 1403 1363 1291 NA 1242
## 59 1403 NA 1411 1348 1283 1270 1199
## 60 1449 1399 1242 1332 1229 NA NA
## 61 1441 1384 1270 1362 1332 1522 980
## 62 1186 NA NA NA NA NA NA
## 63 1553 1382 1291 1283 1242 NA NA
## 64 1555 1522 1494 1291 377 1332 1270
matr_names=c("O1 Pre-rating","O2 Pre-rating","O3 Pre-rating","O4 Pre-rating","O5 Pre-rating","O6 Pre-rating","O7 Pre-rating")
colnames(op_matr)<-matr_names
op_matr$Num.of.Opponents <- rowSums(!is.na(op_matr))
op_matr$TotalPreOp_rating <- rowSums(op_matr[,1:7],na.rm=TRUE)
op_matr$AvgPreOp_rating <- round((op_matr$TotalPreOp_rating/op_matr$Num.of.Opponents),0)
head(op_matr,n=20)
## O1 Pre-rating O2 Pre-rating O3 Pre-rating O4 Pre-rating O5 Pre-rating
## 1 1436 1563 1600 1610 1649
## 2 1175 917 1716 1629 1604
## 3 1641 955 1745 1563 1712
## 4 1363 1507 1553 1579 1655
## 5 1242 980 1663 1666 1716
## 6 1399 1602 1712 1438 1365
## 7 1092 377 1666 1712 1794
## 8 1384 1441 1610 1411 1362
## 9 1745 1600 853 1641 1579
## 10 1604 1564 1186 1494 1686
## 11 1423 1153 1686 1649 1384
## 12 1332 1449 1655 1423 NA
## 13 1355 1552 1649 1655 1449
## 14 1270 1199 1641 1794 1552
## 15 1564 1604 1522 1555 1270
## 16 1365 1220 NA 1436 1553
## 17 1382 1403 1579 1553 1363
## 18 1362 1411 1794 1441 1564
## 19 1220 1365 935 1507 1600
## 20 1348 1291 1363 1403 1507
## O6 Pre-rating O7 Pre-rating Num.of.Opponents TotalPreOp_rating
## 1 1663 1716 7 11237
## 2 1595 1649 7 10285
## 3 1666 1663 7 10945
## 4 1564 1794 7 11015
## 5 1610 1629 7 10506
## 6 1552 1563 7 10631
## 7 1411 1553 7 9605
## 8 1507 1564 7 10279
## 9 1649 1595 7 10662
## 10 1745 1600 7 10879
## 11 1399 1579 7 10273
## 12 1794 1384 6 9037
## 13 1384 1441 7 10485
## 14 1655 1494 7 10605
## 15 1449 1423 7 10387
## 16 1355 NA 5 6929
## 17 1555 1655 7 10490
## 18 1423 1365 7 10360
## 19 1716 1641 7 9984
## 20 1553 1411 7 9876
## AvgPreOp_rating
## 1 1605
## 2 1469
## 3 1564
## 4 1574
## 5 1501
## 6 1519
## 7 1372
## 8 1468
## 9 1523
## 10 1554
## 11 1468
## 12 1506
## 13 1498
## 14 1515
## 15 1484
## 16 1386
## 17 1499
## 18 1480
## 19 1426
## 20 1411
library(dplyr)
table <- data.frame("Player Name"=names, state=state, "Number of Points"=pts, pre_rate_df,op_matr)
head(table,n=15)
## Player.Name state Number.of.Points Index rating O1.Pre.rating
## 1 GARY HUA ON 6.0 1 1794 1436
## 2 DAKSHESH DARURI MI 6.0 2 1553 1175
## 3 ADITYA BAJAJ MI 6.0 3 1384 1641
## 4 PATRICK H SCHILLING MI 5.5 4 1716 1363
## 5 HANSHI ZUO MI 5.5 5 1655 1242
## 6 HANSEN SONG OH 5.0 6 1686 1399
## 7 GARY DEE SWATHELL MI 5.0 7 1649 1092
## 8 EZEKIEL HOUGHTON MI 5.0 8 1641 1384
## 9 STEFANO LEE ON 5.0 9 1411 1745
## 10 ANVIT RAO MI 5.0 10 1365 1604
## 11 CAMERON WILLIAM MC MI 4.5 11 1712 1423
## 12 KENNETH J TACK MI 4.5 12 1663 1332
## 13 TORRANCE HENRY JR MI 4.5 13 1666 1355
## 14 BRADLEY SHAW MI 4.5 14 1610 1270
## 15 ZACHARY JAMES HOUGHTON MI 4.5 15 1220 1564
## O2.Pre.rating O3.Pre.rating O4.Pre.rating O5.Pre.rating O6.Pre.rating
## 1 1563 1600 1610 1649 1663
## 2 917 1716 1629 1604 1595
## 3 955 1745 1563 1712 1666
## 4 1507 1553 1579 1655 1564
## 5 980 1663 1666 1716 1610
## 6 1602 1712 1438 1365 1552
## 7 377 1666 1712 1794 1411
## 8 1441 1610 1411 1362 1507
## 9 1600 853 1641 1579 1649
## 10 1564 1186 1494 1686 1745
## 11 1153 1686 1649 1384 1399
## 12 1449 1655 1423 NA 1794
## 13 1552 1649 1655 1449 1384
## 14 1199 1641 1794 1552 1655
## 15 1604 1522 1555 1270 1449
## O7.Pre.rating Num.of.Opponents TotalPreOp_rating AvgPreOp_rating
## 1 1716 7 11237 1605
## 2 1649 7 10285 1469
## 3 1663 7 10945 1564
## 4 1794 7 11015 1574
## 5 1629 7 10506 1501
## 6 1563 7 10631 1519
## 7 1553 7 9605 1372
## 8 1564 7 10279 1468
## 9 1595 7 10662 1523
## 10 1600 7 10879 1554
## 11 1579 7 10273 1468
## 12 1384 6 9037 1506
## 13 1441 7 10485 1498
## 14 1494 7 10605 1515
## 15 1423 7 10387 1484
chess_rating_table <- table%>% select(Player.Name,state,Number.of.Points,rating,AvgPreOp_rating)
chess_rating_table
## Player.Name state Number.of.Points rating AvgPreOp_rating
## 1 GARY HUA ON 6.0 1794 1605
## 2 DAKSHESH DARURI MI 6.0 1553 1469
## 3 ADITYA BAJAJ MI 6.0 1384 1564
## 4 PATRICK H SCHILLING MI 5.5 1716 1574
## 5 HANSHI ZUO MI 5.5 1655 1501
## 6 HANSEN SONG OH 5.0 1686 1519
## 7 GARY DEE SWATHELL MI 5.0 1649 1372
## 8 EZEKIEL HOUGHTON MI 5.0 1641 1468
## 9 STEFANO LEE ON 5.0 1411 1523
## 10 ANVIT RAO MI 5.0 1365 1554
## 11 CAMERON WILLIAM MC MI 4.5 1712 1468
## 12 KENNETH J TACK MI 4.5 1663 1506
## 13 TORRANCE HENRY JR MI 4.5 1666 1498
## 14 BRADLEY SHAW MI 4.5 1610 1515
## 15 ZACHARY JAMES HOUGHTON MI 4.5 1220 1484
## 16 MIKE NIKITIN MI 4.0 1604 1386
## 17 RONALD GRZEGORCZYK MI 4.0 1629 1499
## 18 DAVID SUNDEEN MI 4.0 1600 1480
## 19 DIPANKAR ROY MI 4.0 1564 1426
## 20 JASON ZHENG MI 4.0 1595 1411
## 21 DINH DANG BUI ON 4.0 1563 1470
## 22 EUGENE L MCCLURE MI 4.0 1555 1300
## 23 ALAN BUI ON 4.0 1363 1214
## 24 MICHAEL R ALDRICH MI 4.0 1229 1357
## 25 LOREN SCHWIEBERT MI 3.5 1745 1363
## 26 MAX ZHU ON 3.5 1579 1507
## 27 GAURAV GIDWANI MI 3.5 1552 1222
## 28 SOFIA ADINA STANESCU-BELLU MI 3.5 1507 1522
## 29 CHIEDOZIE OKORIE MI 3.5 1602 1314
## 30 GEORGE AVERY JONES ON 3.5 1522 1144
## 31 RISHI SHETTY MI 3.5 1494 1260
## 32 JOSHUA PHILIP MATHEWS ON 3.5 1441 1379
## 33 JADE GE MI 3.5 1449 1277
## 34 MICHAEL JEFFERY THOMAS MI 3.5 1399 1375
## 35 JOSHUA DAVID LEE MI 3.5 1438 1150
## 36 SIDDHARTH JHA MI 3.5 1355 1388
## 37 AMIYATOSH PWNANANDAM MI 3.5 980 1385
## 38 BRIAN LIU MI 3.0 1423 1539
## 39 JOEL R HENDON MI 3.0 1436 1430
## 40 FOREST ZHANG MI 3.0 1348 1391
## 41 KYLE WILLIAM MURPHY MI 3.0 1403 1248
## 42 JARED GE MI 3.0 1332 1150
## 43 ROBERT GLEN VASEY MI 3.0 1283 1107
## 44 JUSTIN D SCHILLING MI 3.0 1199 1327
## 45 DEREK YAN MI 3.0 1242 1152
## 46 JACOB ALEXANDER LAVALLEY MI 3.0 377 1358
## 47 ERIC WRIGHT MI 2.5 1362 1392
## 48 DANIEL KHAIN MI 2.5 1382 1356
## 49 MICHAEL J MARTIN MI 2.5 1291 1286
## 50 SHIVAM JHA MI 2.5 1056 1296
## 51 TEJAS AYYAGARI MI 2.5 1011 1356
## 52 ETHAN GUO MI 2.5 935 1495
## 53 JOSE C YBARRA MI 2.0 1393 1345
## 54 LARRY HODGE MI 2.0 1270 1206
## 55 ALEX KONG MI 2.0 1186 1406
## 56 MARISA RICCI MI 2.0 1153 1414
## 57 MICHAEL LU MI 2.0 1092 1363
## 58 VIRAJ MOHILE MI 2.0 917 1391
## 59 SEAN M MC MI 2.0 853 1319
## 60 JULIA SHEN MI 1.5 967 1330
## 61 JEZZEL FARKAS ON 1.5 955 1327
## 62 ASHWIN BALAJI MI 1.0 1530 1186
## 63 THOMAS JOSEPH HOSMER MI 1.0 1175 1350
## 64 BEN LI MI 1.0 1163 1263
write.csv(chess_rating_table, row.names = FALSE)
## "Player.Name","state","Number.of.Points","rating","AvgPreOp_rating"
## " GARY HUA "," ON ","6.0",1794,1605
## " DAKSHESH DARURI "," MI ","6.0",1553,1469
## " ADITYA BAJAJ "," MI ","6.0",1384,1564
## " PATRICK H SCHILLING "," MI ","5.5",1716,1574
## " HANSHI ZUO "," MI ","5.5",1655,1501
## " HANSEN SONG "," OH ","5.0",1686,1519
## " GARY DEE SWATHELL "," MI ","5.0",1649,1372
## " EZEKIEL HOUGHTON "," MI ","5.0",1641,1468
## " STEFANO LEE "," ON ","5.0",1411,1523
## " ANVIT RAO "," MI ","5.0",1365,1554
## " CAMERON WILLIAM MC "," MI ","4.5",1712,1468
## " KENNETH J TACK "," MI ","4.5",1663,1506
## " TORRANCE HENRY JR "," MI ","4.5",1666,1498
## " BRADLEY SHAW "," MI ","4.5",1610,1515
## " ZACHARY JAMES HOUGHTON "," MI ","4.5",1220,1484
## " MIKE NIKITIN "," MI ","4.0",1604,1386
## " RONALD GRZEGORCZYK "," MI ","4.0",1629,1499
## " DAVID SUNDEEN "," MI ","4.0",1600,1480
## " DIPANKAR ROY "," MI ","4.0",1564,1426
## " JASON ZHENG "," MI ","4.0",1595,1411
## " DINH DANG BUI "," ON ","4.0",1563,1470
## " EUGENE L MCCLURE "," MI ","4.0",1555,1300
## " ALAN BUI "," ON ","4.0",1363,1214
## " MICHAEL R ALDRICH "," MI ","4.0",1229,1357
## " LOREN SCHWIEBERT "," MI ","3.5",1745,1363
## " MAX ZHU "," ON ","3.5",1579,1507
## " GAURAV GIDWANI "," MI ","3.5",1552,1222
## " SOFIA ADINA STANESCU-BELLU "," MI ","3.5",1507,1522
## " CHIEDOZIE OKORIE "," MI ","3.5",1602,1314
## " GEORGE AVERY JONES "," ON ","3.5",1522,1144
## " RISHI SHETTY "," MI ","3.5",1494,1260
## " JOSHUA PHILIP MATHEWS "," ON ","3.5",1441,1379
## " JADE GE "," MI ","3.5",1449,1277
## " MICHAEL JEFFERY THOMAS "," MI ","3.5",1399,1375
## " JOSHUA DAVID LEE "," MI ","3.5",1438,1150
## " SIDDHARTH JHA "," MI ","3.5",1355,1388
## " AMIYATOSH PWNANANDAM "," MI ","3.5",980,1385
## " BRIAN LIU "," MI ","3.0",1423,1539
## " JOEL R HENDON "," MI ","3.0",1436,1430
## " FOREST ZHANG "," MI ","3.0",1348,1391
## " KYLE WILLIAM MURPHY "," MI ","3.0",1403,1248
## " JARED GE "," MI ","3.0",1332,1150
## " ROBERT GLEN VASEY "," MI ","3.0",1283,1107
## " JUSTIN D SCHILLING "," MI ","3.0",1199,1327
## " DEREK YAN "," MI ","3.0",1242,1152
## " JACOB ALEXANDER LAVALLEY "," MI ","3.0",377,1358
## " ERIC WRIGHT "," MI ","2.5",1362,1392
## " DANIEL KHAIN "," MI ","2.5",1382,1356
## " MICHAEL J MARTIN "," MI ","2.5",1291,1286
## " SHIVAM JHA "," MI ","2.5",1056,1296
## " TEJAS AYYAGARI "," MI ","2.5",1011,1356
## " ETHAN GUO "," MI ","2.5",935,1495
## " JOSE C YBARRA "," MI ","2.0",1393,1345
## " LARRY HODGE "," MI ","2.0",1270,1206
## " ALEX KONG "," MI ","2.0",1186,1406
## " MARISA RICCI "," MI ","2.0",1153,1414
## " MICHAEL LU "," MI ","2.0",1092,1363
## " VIRAJ MOHILE "," MI ","2.0",917,1391
## " SEAN M MC "," MI ","2.0",853,1319
## " JULIA SHEN "," MI ","1.5",967,1330
## " JEZZEL FARKAS "," ON ","1.5",955,1327
## " ASHWIN BALAJI "," MI ","1.0",1530,1186
## " THOMAS JOSEPH HOSMER "," MI ","1.0",1175,1350
## " BEN LI "," MI ","1.0",1163,1263
#write.csv(chess_rating_table, "choice_file_name.csv", row.names = FALSE)