First, we load our data and prepare it by separating contestant’s information from their rating list.

chess <- read.csv(file="/Users/omarpineda/Desktop/CUNY SPS MS Data Science/DATA607 Data Acquisition and Management/Week 4/tournamentinfo.txt", header=FALSE)
head(chess)
##                                                                                           V1
## 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    |
chess <- chess[c(5:196),] #removes the first four rows
contestant <- chess[seq(1, length(chess), 3)]
contestant2 <- chess[seq(2, length(chess), 3)]
head(contestant)
## [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|
## 131 Levels:     1 | GARY HUA                        |6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4| ...
head(contestant2)
## [1]    ON | 15445895 / R: 1794   ->1817     |N:2  |W    |B    |W    |B    |W    |B    |W    |
## [2]    MI | 14598900 / R: 1553   ->1663     |N:2  |B    |W    |B    |W    |B    |W    |B    |
## [3]    MI | 14959604 / R: 1384   ->1640     |N:2  |W    |B    |W    |B    |W    |B    |W    |
## [4]    MI | 12616049 / R: 1716   ->1744     |N:2  |W    |B    |W    |B    |W    |B    |B    |
## [5]    MI | 14601533 / R: 1655   ->1690     |N:2  |B    |W    |B    |W    |B    |W    |B    |
## [6]    OH | 15055204 / R: 1686   ->1687     |N:3  |W    |B    |W    |B    |B    |W    |B    |
## 131 Levels:     1 | GARY HUA                        |6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4| ...

Next, we use regular expressions to extract the needed information from our data.

library(stringr)
name <- str_trim(str_extract(contestant, "(\\w+\\s){2,3}"))
state <- str_extract(contestant2, "\\w+")
totalPoints <- as.numeric(str_extract(contestant, "\\d\\.\\d"))
preRating <- str_extract(contestant2, "[^\\d]\\d{3,4}[^\\d]")
preRating <- as.numeric(str_extract(preRating, "\\d+")) #removes possible characters in the pre-rating
opponents <- str_extract_all(contestant, "\\d+\\|")
opponents <- str_extract_all(opponents, "\\d+") #removes trailing pipe from the opponent's number
## Warning in stri_extract_all_regex(string, pattern, simplify = simplify, :
## argument is not an atomic vector; coercing

We then calculate the average pre-chess rating of opponents for each contestant.

avgOpp <- 0
for (i in 1:length(contestant)) {     #go through each of our contestants
  opp <- as.numeric(unlist(opponents[[i]]))   #save each contestant's opponents into a list
  sum <- 0
  for (n in 1:length(opp)) {  #go through each opponent in the contestant's list of opponents
    sum <- sum + preRating[opp[n]]  #add up all of the opponents' corresponding pre-ratings
  }
  avgOpp[i] <- sum / length(opp)  #find the average pre-rating for each contestant's opponents
}
avgOpp <- round(avgOpp, digits = 0)
avgOpp
##  [1] 1605 1469 1564 1574 1501 1519 1372 1468 1523 1554 1468 1506 1498 1515
## [15] 1484 1386 1499 1480 1426 1411 1470 1300 1214 1357 1363 1507 1222 1522
## [29] 1314 1144 1260 1379 1277 1375 1150 1388 1385 1539 1430 1391 1248 1150
## [43] 1107 1327 1152 1358 1392 1356 1286 1296 1356 1495 1345 1206 1406 1414
## [57] 1363 1391 1319 1330 1327 1186 1350 1263

Finally, we save all of our vectors into a data frame and generate a CSV.

chessFinal <- data.frame(name, state, totalPoints, preRating, avgOpp)
chessFinal
##                        name state totalPoints preRating avgOpp
## 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(chessFinal, 'chess.csv')