In this project, you’re given a text file with chess tournament results where the information has some structure. Your job is 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 For the first player, the information would be: Gary Hua, ON, 6.0, 1794, 1605

Load the requried tidyverse library package.

library(readr)
library(stringr)

Load data from URL.

url<-"https://raw.githubusercontent.com/Weicaidata/607/master/tournamentinfo.txt"
tournament<-readLines(url,warn=FALSE  )
head(tournament,n=8 )
## [1] "-----------------------------------------------------------------------------------------" 
## [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  | "
## [4] "-----------------------------------------------------------------------------------------" 
## [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    |" 
## [7] "-----------------------------------------------------------------------------------------" 
## [8] "    2 | DAKSHESH DARURI                 |6.0  |W  63|W  58|L   4|W  17|W  16|W  20|W   7|"

Remove the title for first 4 lines for later data cleaning.

tourt<- tournament[-c(0:4)]
head(tourt)
## [1] "    1 | GARY HUA                        |6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4|"
## [2] "   ON | 15445895 / R: 1794   ->1817     |N:2  |W    |B    |W    |B    |W    |B    |W    |"
## [3] "-----------------------------------------------------------------------------------------"
## [4] "    2 | DAKSHESH DARURI                 |6.0  |W  63|W  58|L   4|W  17|W  16|W  20|W   7|"
## [5] "   MI | 14598900 / R: 1553   ->1663     |N:2  |B    |W    |B    |W    |B    |W    |B    |"
## [6] "-----------------------------------------------------------------------------------------"

notice that each record contains two lines. we create line1 and line2 for later data extrattion.

line1 <- tourt[seq(1, length(tourt), by =3)]
line2 <- tourt[seq(2, length(tourt),by =3)]
line1
##  [1] "    1 | GARY HUA                        |6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4|"
##  [2] "    2 | DAKSHESH DARURI                 |6.0  |W  63|W  58|L   4|W  17|W  16|W  20|W   7|"
##  [3] "    3 | ADITYA BAJAJ                    |6.0  |L   8|W  61|W  25|W  21|W  11|W  13|W  12|"
##  [4] "    4 | PATRICK H SCHILLING             |5.5  |W  23|D  28|W   2|W  26|D   5|W  19|D   1|"
##  [5] "    5 | HANSHI ZUO                      |5.5  |W  45|W  37|D  12|D  13|D   4|W  14|W  17|"
##  [6] "    6 | HANSEN SONG                     |5.0  |W  34|D  29|L  11|W  35|D  10|W  27|W  21|"
##  [7] "    7 | GARY DEE SWATHELL               |5.0  |W  57|W  46|W  13|W  11|L   1|W   9|L   2|"
##  [8] "    8 | EZEKIEL HOUGHTON                |5.0  |W   3|W  32|L  14|L   9|W  47|W  28|W  19|"
##  [9] "    9 | STEFANO LEE                     |5.0  |W  25|L  18|W  59|W   8|W  26|L   7|W  20|"
## [10] "   10 | ANVIT RAO                       |5.0  |D  16|L  19|W  55|W  31|D   6|W  25|W  18|"
## [11] "   11 | CAMERON WILLIAM MC LEMAN        |4.5  |D  38|W  56|W   6|L   7|L   3|W  34|W  26|"
## [12] "   12 | KENNETH J TACK                  |4.5  |W  42|W  33|D   5|W  38|H    |D   1|L   3|"
## [13] "   13 | TORRANCE HENRY JR               |4.5  |W  36|W  27|L   7|D   5|W  33|L   3|W  32|"
## [14] "   14 | BRADLEY SHAW                    |4.5  |W  54|W  44|W   8|L   1|D  27|L   5|W  31|"
## [15] "   15 | ZACHARY JAMES HOUGHTON          |4.5  |D  19|L  16|W  30|L  22|W  54|W  33|W  38|"
## [16] "   16 | MIKE NIKITIN                    |4.0  |D  10|W  15|H    |W  39|L   2|W  36|U    |"
## [17] "   17 | RONALD GRZEGORCZYK              |4.0  |W  48|W  41|L  26|L   2|W  23|W  22|L   5|"
## [18] "   18 | DAVID SUNDEEN                   |4.0  |W  47|W   9|L   1|W  32|L  19|W  38|L  10|"
## [19] "   19 | DIPANKAR ROY                    |4.0  |D  15|W  10|W  52|D  28|W  18|L   4|L   8|"
## [20] "   20 | JASON ZHENG                     |4.0  |L  40|W  49|W  23|W  41|W  28|L   2|L   9|"
## [21] "   21 | DINH DANG BUI                   |4.0  |W  43|L   1|W  47|L   3|W  40|W  39|L   6|"
## [22] "   22 | EUGENE L MCCLURE                |4.0  |W  64|D  52|L  28|W  15|H    |L  17|W  40|"
## [23] "   23 | ALAN BUI                        |4.0  |L   4|W  43|L  20|W  58|L  17|W  37|W  46|"
## [24] "   24 | MICHAEL R ALDRICH               |4.0  |L  28|L  47|W  43|L  25|W  60|W  44|W  39|"
## [25] "   25 | LOREN SCHWIEBERT                |3.5  |L   9|W  53|L   3|W  24|D  34|L  10|W  47|"
## [26] "   26 | MAX ZHU                         |3.5  |W  49|W  40|W  17|L   4|L   9|D  32|L  11|"
## [27] "   27 | GAURAV GIDWANI                  |3.5  |W  51|L  13|W  46|W  37|D  14|L   6|U    |"
## [28] "   28 | SOFIA ADINA STANESCU-BELLU      |3.5  |W  24|D   4|W  22|D  19|L  20|L   8|D  36|"
## [29] "   29 | CHIEDOZIE OKORIE                |3.5  |W  50|D   6|L  38|L  34|W  52|W  48|U    |"
## [30] "   30 | GEORGE AVERY JONES              |3.5  |L  52|D  64|L  15|W  55|L  31|W  61|W  50|"
## [31] "   31 | RISHI SHETTY                    |3.5  |L  58|D  55|W  64|L  10|W  30|W  50|L  14|"
## [32] "   32 | JOSHUA PHILIP MATHEWS           |3.5  |W  61|L   8|W  44|L  18|W  51|D  26|L  13|"
## [33] "   33 | JADE GE                         |3.5  |W  60|L  12|W  50|D  36|L  13|L  15|W  51|"
## [34] "   34 | MICHAEL JEFFERY THOMAS          |3.5  |L   6|W  60|L  37|W  29|D  25|L  11|W  52|"
## [35] "   35 | JOSHUA DAVID LEE                |3.5  |L  46|L  38|W  56|L   6|W  57|D  52|W  48|"
## [36] "   36 | SIDDHARTH JHA                   |3.5  |L  13|W  57|W  51|D  33|H    |L  16|D  28|"
## [37] "   37 | AMIYATOSH PWNANANDAM            |3.5  |B    |L   5|W  34|L  27|H    |L  23|W  61|"
## [38] "   38 | BRIAN LIU                       |3.0  |D  11|W  35|W  29|L  12|H    |L  18|L  15|"
## [39] "   39 | JOEL R HENDON                   |3.0  |L   1|W  54|W  40|L  16|W  44|L  21|L  24|"
## [40] "   40 | FOREST ZHANG                    |3.0  |W  20|L  26|L  39|W  59|L  21|W  56|L  22|"
## [41] "   41 | KYLE WILLIAM MURPHY             |3.0  |W  59|L  17|W  58|L  20|X    |U    |U    |"
## [42] "   42 | JARED GE                        |3.0  |L  12|L  50|L  57|D  60|D  61|W  64|W  56|"
## [43] "   43 | ROBERT GLEN VASEY               |3.0  |L  21|L  23|L  24|W  63|W  59|L  46|W  55|"
## [44] "   44 | JUSTIN D SCHILLING              |3.0  |B    |L  14|L  32|W  53|L  39|L  24|W  59|"
## [45] "   45 | DEREK YAN                       |3.0  |L   5|L  51|D  60|L  56|W  63|D  55|W  58|"
## [46] "   46 | JACOB ALEXANDER LAVALLEY        |3.0  |W  35|L   7|L  27|L  50|W  64|W  43|L  23|"
## [47] "   47 | ERIC WRIGHT                     |2.5  |L  18|W  24|L  21|W  61|L   8|D  51|L  25|"
## [48] "   48 | DANIEL KHAIN                    |2.5  |L  17|W  63|H    |D  52|H    |L  29|L  35|"
## [49] "   49 | MICHAEL J MARTIN                |2.5  |L  26|L  20|D  63|D  64|W  58|H    |U    |"
## [50] "   50 | SHIVAM JHA                      |2.5  |L  29|W  42|L  33|W  46|H    |L  31|L  30|"
## [51] "   51 | TEJAS AYYAGARI                  |2.5  |L  27|W  45|L  36|W  57|L  32|D  47|L  33|"
## [52] "   52 | ETHAN GUO                       |2.5  |W  30|D  22|L  19|D  48|L  29|D  35|L  34|"
## [53] "   53 | JOSE C YBARRA                   |2.0  |H    |L  25|H    |L  44|U    |W  57|U    |"
## [54] "   54 | LARRY HODGE                     |2.0  |L  14|L  39|L  61|B    |L  15|L  59|W  64|"
## [55] "   55 | ALEX KONG                       |2.0  |L  62|D  31|L  10|L  30|B    |D  45|L  43|"
## [56] "   56 | MARISA RICCI                    |2.0  |H    |L  11|L  35|W  45|H    |L  40|L  42|"
## [57] "   57 | MICHAEL LU                      |2.0  |L   7|L  36|W  42|L  51|L  35|L  53|B    |"
## [58] "   58 | VIRAJ MOHILE                    |2.0  |W  31|L   2|L  41|L  23|L  49|B    |L  45|"
## [59] "   59 | SEAN M MC CORMICK               |2.0  |L  41|B    |L   9|L  40|L  43|W  54|L  44|"
## [60] "   60 | JULIA SHEN                      |1.5  |L  33|L  34|D  45|D  42|L  24|H    |U    |"
## [61] "   61 | JEZZEL FARKAS                   |1.5  |L  32|L   3|W  54|L  47|D  42|L  30|L  37|"
## [62] "   62 | ASHWIN BALAJI                   |1.0  |W  55|U    |U    |U    |U    |U    |U    |"
## [63] "   63 | THOMAS JOSEPH HOSMER            |1.0  |L   2|L  48|D  49|L  43|L  45|H    |U    |"
## [64] "   64 | BEN LI                          |1.0  |L  22|D  30|L  31|D  49|L  46|L  42|L  54|"

extract each piece infomation from line1 and line2.

pairNum <- as.integer(str_extract(line1, "\\d+"))
Name <- str_trim(str_extract(line1, "(\\w+\\s){2,3}"))
state <- str_extract(line2, "\\w+")
Points <- as.numeric(str_extract(line1, "\\d+\\.\\d+"))
Rating <- as.integer(str_extract(str_extract(line2, "[^\\d]\\d{3,4}[^\\d]"), "\\d+"))
Opponents <- str_extract_all(str_extract_all(line1, "\\d+\\|"), "\\d+")
## Warning in stri_extract_all_regex(string, pattern, simplify = simplify, :
## argument is not an atomic vector; coercing

To calculate opponents’ Mean Rating.

OpponementsRating <- length(line1)
for (i in 1:length(line1)) { 
  OpponementsRating[i] <- round(mean(Rating[as.numeric(unlist(Opponents[pairNum[i]]))]), digits = 0) 
}
Tournamentlist <- data.frame(Name,state, Points, Rating, OpponementsRating)
Tournamentlist
##                        Name state Points Rating OpponementsRating
## 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    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 file into working directory

write.table(Tournamentlist, file = "tournamentfinal.csv",row.names=FALSE, na="",col.names=TRUE, sep=",")