Import the Stringr library and then pull in the data. I had an error saying that I am not authorized to pull data directly from the CUNY site that had the chess data, so I had to download it.

Then we view the data and change the column name to something simple.

library (stringr)
tournamentinfo <- read.csv("F:/Data/Project 1/tournamentinfo.txt")
head(tournamentinfo)
##   X.........................................................................................
## 1  Pair | Player Name                     |Total|Round|Round|Round|Round|Round|Round|Round| 
## 2  Num  | USCF ID / Rtg (Pre->Post)       | Pts |  1  |  2  |  3  |  4  |  5  |  6  |  7  | 
## 3  -----------------------------------------------------------------------------------------
## 4      1 | GARY HUA                        |6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4|
## 5     ON | 15445895 / R: 1794   ->1817     |N:2  |W    |B    |W    |B    |W    |B    |W    |
## 6  -----------------------------------------------------------------------------------------
names(tournamentinfo) <- c("x")

Now that we have the data I will first break out the names of the different players using regular expressions.

Any time that we have a set of two or more characters separated by any number of characters followed by a set of another two or more characters, we have our name.

Upon looking at the data, we also have a couple rows of non relevant data (i.e. “Player Name”) so we can delete the rows with this column header information.

name <- unlist(str_extract_all(tournamentinfo$x, "[[:alpha:]]{2,}.+[[:alpha:]]{2,}"))
name
##  [1] "Pair | Player Name                     |Total|Round|Round|Round|Round|Round|Round|Round"
##  [2] "Num  | USCF ID / Rtg (Pre->Post)       | Pts"                                           
##  [3] "GARY HUA"                                                                               
##  [4] "DAKSHESH DARURI"                                                                        
##  [5] "ADITYA BAJAJ"                                                                           
##  [6] "PATRICK H SCHILLING"                                                                    
##  [7] "HANSHI ZUO"                                                                             
##  [8] "HANSEN SONG"                                                                            
##  [9] "GARY DEE SWATHELL"                                                                      
## [10] "EZEKIEL HOUGHTON"                                                                       
## [11] "STEFANO LEE"                                                                            
## [12] "ANVIT RAO"                                                                              
## [13] "CAMERON WILLIAM MC LEMAN"                                                               
## [14] "KENNETH J TACK"                                                                         
## [15] "TORRANCE HENRY JR"                                                                      
## [16] "BRADLEY SHAW"                                                                           
## [17] "ZACHARY JAMES HOUGHTON"                                                                 
## [18] "MIKE NIKITIN"                                                                           
## [19] "RONALD GRZEGORCZYK"                                                                     
## [20] "DAVID SUNDEEN"                                                                          
## [21] "DIPANKAR ROY"                                                                           
## [22] "JASON ZHENG"                                                                            
## [23] "DINH DANG BUI"                                                                          
## [24] "EUGENE L MCCLURE"                                                                       
## [25] "ALAN BUI"                                                                               
## [26] "MICHAEL R ALDRICH"                                                                      
## [27] "LOREN SCHWIEBERT"                                                                       
## [28] "MAX ZHU"                                                                                
## [29] "GAURAV GIDWANI"                                                                         
## [30] "SOFIA ADINA STANESCU-BELLU"                                                             
## [31] "CHIEDOZIE OKORIE"                                                                       
## [32] "GEORGE AVERY JONES"                                                                     
## [33] "RISHI SHETTY"                                                                           
## [34] "JOSHUA PHILIP MATHEWS"                                                                  
## [35] "JADE GE"                                                                                
## [36] "MICHAEL JEFFERY THOMAS"                                                                 
## [37] "JOSHUA DAVID LEE"                                                                       
## [38] "SIDDHARTH JHA"                                                                          
## [39] "AMIYATOSH PWNANANDAM"                                                                   
## [40] "BRIAN LIU"                                                                              
## [41] "JOEL R HENDON"                                                                          
## [42] "FOREST ZHANG"                                                                           
## [43] "KYLE WILLIAM MURPHY"                                                                    
## [44] "JARED GE"                                                                               
## [45] "ROBERT GLEN VASEY"                                                                      
## [46] "JUSTIN D SCHILLING"                                                                     
## [47] "DEREK YAN"                                                                              
## [48] "JACOB ALEXANDER LAVALLEY"                                                               
## [49] "ERIC WRIGHT"                                                                            
## [50] "DANIEL KHAIN"                                                                           
## [51] "MICHAEL J MARTIN"                                                                       
## [52] "SHIVAM JHA"                                                                             
## [53] "TEJAS AYYAGARI"                                                                         
## [54] "ETHAN GUO"                                                                              
## [55] "JOSE C YBARRA"                                                                          
## [56] "LARRY HODGE"                                                                            
## [57] "ALEX KONG"                                                                              
## [58] "MARISA RICCI"                                                                           
## [59] "MICHAEL LU"                                                                             
## [60] "VIRAJ MOHILE"                                                                           
## [61] "SEAN M MC CORMICK"                                                                      
## [62] "JULIA SHEN"                                                                             
## [63] "JEZZEL FARKAS"                                                                          
## [64] "ASHWIN BALAJI"                                                                          
## [65] "THOMAS JOSEPH HOSMER"                                                                   
## [66] "BEN LI"
name <- name[-(1:2)]
name
##  [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 LEMAN"   "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 CORMICK"          "JULIA SHEN"                
## [61] "JEZZEL FARKAS"              "ASHWIN BALAJI"             
## [63] "THOMAS JOSEPH HOSMER"       "BEN LI"

Next we extract the state values. State abbreviations are always two alphabetic characters in a row and they follow a space and then the “|”. After we have isolated any value that meets this criteria, we can then remove the “|” using another regular expression.

state <- unlist(str_extract_all(tournamentinfo$x, "( [[:alpha:]]{2,2} \\|)"))
state
##  [1] " ON |" " MI |" " MI |" " MI |" " MI |" " OH |" " MI |" " MI |"
##  [9] " ON |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |"
## [17] " MI |" " MI |" " MI |" " MI |" " ON |" " MI |" " ON |" " MI |"
## [25] " MI |" " ON |" " MI |" " MI |" " MI |" " ON |" " MI |" " ON |"
## [33] " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |"
## [41] " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |"
## [49] " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |" " MI |"
## [57] " MI |" " MI |" " MI |" " MI |" " ON |" " MI |" " MI |" " MI |"
state <- unlist(str_extract_all(state, "[[:alpha:]]{2}"))
state
##  [1] "ON" "MI" "MI" "MI" "MI" "OH" "MI" "MI" "ON" "MI" "MI" "MI" "MI" "MI"
## [15] "MI" "MI" "MI" "MI" "MI" "MI" "ON" "MI" "ON" "MI" "MI" "ON" "MI" "MI"
## [29] "MI" "ON" "MI" "ON" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI"
## [43] "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI"
## [57] "MI" "MI" "MI" "MI" "ON" "MI" "MI" "MI"

The points figure can easily be broken out by identifying two characters separated by a literal “.”

points <- unlist(str_extract_all(tournamentinfo$x, "(.\\..)"))
points
##  [1] "6.0" "6.0" "6.0" "5.5" "5.5" "5.0" "5.0" "5.0" "5.0" "5.0" "4.5"
## [12] "4.5" "4.5" "4.5" "4.5" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0"
## [23] "4.0" "4.0" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5"
## [34] "3.5" "3.5" "3.5" "3.5" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0"
## [45] "3.0" "3.0" "2.5" "2.5" "2.5" "2.5" "2.5" "2.5" "2.0" "2.0" "2.0"
## [56] "2.0" "2.0" "2.0" "2.0" "1.5" "1.5" "1.0" "1.0" "1.0"

To identify the pre-score for each individual player we look for 3 to 4 consecutive numbers that come before “->”. We then ensure that this value is numeric

prescore <- unlist(str_extract_all(tournamentinfo$x, ":.*[[:digit:]]{3,4}.*->"))
prescore
##  [1] ": 1794   ->" ": 1553   ->" ": 1384   ->" ": 1716   ->" ": 1655   ->"
##  [6] ": 1686   ->" ": 1649   ->" ": 1641P17->" ": 1411   ->" ": 1365   ->"
## [11] ": 1712   ->" ": 1663   ->" ": 1666   ->" ": 1610   ->" ": 1220P13->"
## [16] ": 1604   ->" ": 1629   ->" ": 1600   ->" ": 1564   ->" ": 1595   ->"
## [21] ": 1563P22->" ": 1555   ->" ": 1363   ->" ": 1229   ->" ": 1745   ->"
## [26] ": 1579   ->" ": 1552   ->" ": 1507   ->" ": 1602P6 ->" ": 1522   ->"
## [31] ": 1494   ->" ": 1441   ->" ": 1449   ->" ": 1399   ->" ": 1438   ->"
## [36] ": 1355   ->" ":  980P12->" ": 1423   ->" ": 1436P23->" ": 1348   ->"
## [41] ": 1403P5 ->" ": 1332   ->" ": 1283   ->" ": 1199   ->" ": 1242   ->"
## [46] ":  377P3 ->" ": 1362   ->" ": 1382   ->" ": 1291P12->" ": 1056   ->"
## [51] ": 1011   ->" ":  935   ->" ": 1393   ->" ": 1270   ->" ": 1186   ->"
## [56] ": 1153   ->" ": 1092   ->" ":  917   ->" ":  853   ->" ":  967   ->"
## [61] ":  955P11->" ": 1530   ->" ": 1175   ->" ": 1163   ->"
prescore <- unlist(str_extract_all(prescore, "[[:digit:]]{3,4}"))
prescore <- as.numeric(prescore)

Now we create a data frame with the pre-score and a new ID column which we create.

id <- as.factor(1:64)

predf <- data.frame(id, prescore)

To extract the score and the individual rounds we look for the points value followed by characters or spaces and ending with one or more digits. An additional regular expression is used to remove spaces and any of the letters “WLDH”.

rounds <- unlist(str_extract_all(tournamentinfo$x, "(.\\..).* *\\d{1,2}"))
rounds
##  [1] "6.0  |W  39|W  21|W  18|W  14|W   7|D  12|D   4"
##  [2] "6.0  |W  63|W  58|L   4|W  17|W  16|W  20|W   7"
##  [3] "6.0  |L   8|W  61|W  25|W  21|W  11|W  13|W  12"
##  [4] "5.5  |W  23|D  28|W   2|W  26|D   5|W  19|D   1"
##  [5] "5.5  |W  45|W  37|D  12|D  13|D   4|W  14|W  17"
##  [6] "5.0  |W  34|D  29|L  11|W  35|D  10|W  27|W  21"
##  [7] "5.0  |W  57|W  46|W  13|W  11|L   1|W   9|L   2"
##  [8] "5.0  |W   3|W  32|L  14|L   9|W  47|W  28|W  19"
##  [9] "5.0  |W  25|L  18|W  59|W   8|W  26|L   7|W  20"
## [10] "5.0  |D  16|L  19|W  55|W  31|D   6|W  25|W  18"
## [11] "4.5  |D  38|W  56|W   6|L   7|L   3|W  34|W  26"
## [12] "4.5  |W  42|W  33|D   5|W  38|H    |D   1|L   3"
## [13] "4.5  |W  36|W  27|L   7|D   5|W  33|L   3|W  32"
## [14] "4.5  |W  54|W  44|W   8|L   1|D  27|L   5|W  31"
## [15] "4.5  |D  19|L  16|W  30|L  22|W  54|W  33|W  38"
## [16] "4.0  |D  10|W  15|H    |W  39|L   2|W  36"      
## [17] "4.0  |W  48|W  41|L  26|L   2|W  23|W  22|L   5"
## [18] "4.0  |W  47|W   9|L   1|W  32|L  19|W  38|L  10"
## [19] "4.0  |D  15|W  10|W  52|D  28|W  18|L   4|L   8"
## [20] "4.0  |L  40|W  49|W  23|W  41|W  28|L   2|L   9"
## [21] "4.0  |W  43|L   1|W  47|L   3|W  40|W  39|L   6"
## [22] "4.0  |W  64|D  52|L  28|W  15|H    |L  17|W  40"
## [23] "4.0  |L   4|W  43|L  20|W  58|L  17|W  37|W  46"
## [24] "4.0  |L  28|L  47|W  43|L  25|W  60|W  44|W  39"
## [25] "3.5  |L   9|W  53|L   3|W  24|D  34|L  10|W  47"
## [26] "3.5  |W  49|W  40|W  17|L   4|L   9|D  32|L  11"
## [27] "3.5  |W  51|L  13|W  46|W  37|D  14|L   6"      
## [28] "3.5  |W  24|D   4|W  22|D  19|L  20|L   8|D  36"
## [29] "3.5  |W  50|D   6|L  38|L  34|W  52|W  48"      
## [30] "3.5  |L  52|D  64|L  15|W  55|L  31|W  61|W  50"
## [31] "3.5  |L  58|D  55|W  64|L  10|W  30|W  50|L  14"
## [32] "3.5  |W  61|L   8|W  44|L  18|W  51|D  26|L  13"
## [33] "3.5  |W  60|L  12|W  50|D  36|L  13|L  15|W  51"
## [34] "3.5  |L   6|W  60|L  37|W  29|D  25|L  11|W  52"
## [35] "3.5  |L  46|L  38|W  56|L   6|W  57|D  52|W  48"
## [36] "3.5  |L  13|W  57|W  51|D  33|H    |L  16|D  28"
## [37] "3.5  |B    |L   5|W  34|L  27|H    |L  23|W  61"
## [38] "3.0  |D  11|W  35|W  29|L  12|H    |L  18|L  15"
## [39] "3.0  |L   1|W  54|W  40|L  16|W  44|L  21|L  24"
## [40] "3.0  |W  20|L  26|L  39|W  59|L  21|W  56|L  22"
## [41] "3.0  |W  59|L  17|W  58|L  20"                  
## [42] "3.0  |L  12|L  50|L  57|D  60|D  61|W  64|W  56"
## [43] "3.0  |L  21|L  23|L  24|W  63|W  59|L  46|W  55"
## [44] "3.0  |B    |L  14|L  32|W  53|L  39|L  24|W  59"
## [45] "3.0  |L   5|L  51|D  60|L  56|W  63|D  55|W  58"
## [46] "3.0  |W  35|L   7|L  27|L  50|W  64|W  43|L  23"
## [47] "2.5  |L  18|W  24|L  21|W  61|L   8|D  51|L  25"
## [48] "2.5  |L  17|W  63|H    |D  52|H    |L  29|L  35"
## [49] "2.5  |L  26|L  20|D  63|D  64|W  58"            
## [50] "2.5  |L  29|W  42|L  33|W  46|H    |L  31|L  30"
## [51] "2.5  |L  27|W  45|L  36|W  57|L  32|D  47|L  33"
## [52] "2.5  |W  30|D  22|L  19|D  48|L  29|D  35|L  34"
## [53] "2.0  |H    |L  25|H    |L  44|U    |W  57"      
## [54] "2.0  |L  14|L  39|L  61|B    |L  15|L  59|W  64"
## [55] "2.0  |L  62|D  31|L  10|L  30|B    |D  45|L  43"
## [56] "2.0  |H    |L  11|L  35|W  45|H    |L  40|L  42"
## [57] "2.0  |L   7|L  36|W  42|L  51|L  35|L  53"      
## [58] "2.0  |W  31|L   2|L  41|L  23|L  49|B    |L  45"
## [59] "2.0  |L  41|B    |L   9|L  40|L  43|W  54|L  44"
## [60] "1.5  |L  33|L  34|D  45|D  42|L  24"            
## [61] "1.5  |L  32|L   3|W  54|L  47|D  42|L  30|L  37"
## [62] "1.0  |W  55"                                    
## [63] "1.0  |L   2|L  48|D  49|L  43|L  45"            
## [64] "1.0  |L  22|D  30|L  31|D  49|L  46|L  42|L  54"
rounds <- str_replace_all(rounds, "W|L|D|H| ", replacement = "")
rounds
##  [1] "6.0|39|21|18|14|7|12|4"   "6.0|63|58|4|17|16|20|7"  
##  [3] "6.0|8|61|25|21|11|13|12"  "5.5|23|28|2|26|5|19|1"   
##  [5] "5.5|45|37|12|13|4|14|17"  "5.0|34|29|11|35|10|27|21"
##  [7] "5.0|57|46|13|11|1|9|2"    "5.0|3|32|14|9|47|28|19"  
##  [9] "5.0|25|18|59|8|26|7|20"   "5.0|16|19|55|31|6|25|18" 
## [11] "4.5|38|56|6|7|3|34|26"    "4.5|42|33|5|38||1|3"     
## [13] "4.5|36|27|7|5|33|3|32"    "4.5|54|44|8|1|27|5|31"   
## [15] "4.5|19|16|30|22|54|33|38" "4.0|10|15||39|2|36"      
## [17] "4.0|48|41|26|2|23|22|5"   "4.0|47|9|1|32|19|38|10"  
## [19] "4.0|15|10|52|28|18|4|8"   "4.0|40|49|23|41|28|2|9"  
## [21] "4.0|43|1|47|3|40|39|6"    "4.0|64|52|28|15||17|40"  
## [23] "4.0|4|43|20|58|17|37|46"  "4.0|28|47|43|25|60|44|39"
## [25] "3.5|9|53|3|24|34|10|47"   "3.5|49|40|17|4|9|32|11"  
## [27] "3.5|51|13|46|37|14|6"     "3.5|24|4|22|19|20|8|36"  
## [29] "3.5|50|6|38|34|52|48"     "3.5|52|64|15|55|31|61|50"
## [31] "3.5|58|55|64|10|30|50|14" "3.5|61|8|44|18|51|26|13" 
## [33] "3.5|60|12|50|36|13|15|51" "3.5|6|60|37|29|25|11|52" 
## [35] "3.5|46|38|56|6|57|52|48"  "3.5|13|57|51|33||16|28"  
## [37] "3.5|B|5|34|27||23|61"     "3.0|11|35|29|12||18|15"  
## [39] "3.0|1|54|40|16|44|21|24"  "3.0|20|26|39|59|21|56|22"
## [41] "3.0|59|17|58|20"          "3.0|12|50|57|60|61|64|56"
## [43] "3.0|21|23|24|63|59|46|55" "3.0|B|14|32|53|39|24|59" 
## [45] "3.0|5|51|60|56|63|55|58"  "3.0|35|7|27|50|64|43|23" 
## [47] "2.5|18|24|21|61|8|51|25"  "2.5|17|63||52||29|35"    
## [49] "2.5|26|20|63|64|58"       "2.5|29|42|33|46||31|30"  
## [51] "2.5|27|45|36|57|32|47|33" "2.5|30|22|19|48|29|35|34"
## [53] "2.0||25||44|U|57"         "2.0|14|39|61|B|15|59|64" 
## [55] "2.0|62|31|10|30|B|45|43"  "2.0||11|35|45||40|42"    
## [57] "2.0|7|36|42|51|35|53"     "2.0|31|2|41|23|49|B|45"  
## [59] "2.0|41|B|9|40|43|54|44"   "1.5|33|34|45|42|24"      
## [61] "1.5|32|3|54|47|42|30|37"  "1.0|55"                  
## [63] "1.0|2|48|49|43|45"        "1.0|22|30|31|49|46|42|54"

Found this solution at the following link: http://stackoverflow.com/questions/7069076/split-column-at-delimiter-in-data-frame

Attempted to use the tidyr package to separate the columns but was getting an error message that there were too few results for certain rows.

If I’m understanding it correctly, do.call allows us to apply a function (in this case rbind which binds the result to rows) to the results of the strsplit argument.

We then add an ID column and rename the columns

roundsdf <- data.frame(rounds)
roundsdf <- data.frame(do.call('rbind', strsplit(as.character(roundsdf$rounds),'|',fixed=TRUE)))
## Warning in rbind(c("6.0", "39", "21", "18", "14", "7", "12", "4"),
## c("6.0", : number of columns of result is not a multiple of vector length
## (arg 16)
roundsdf
##     X1 X2  X3 X4  X5  X6  X7  X8
## 1  6.0 39  21 18  14   7  12   4
## 2  6.0 63  58  4  17  16  20   7
## 3  6.0  8  61 25  21  11  13  12
## 4  5.5 23  28  2  26   5  19   1
## 5  5.5 45  37 12  13   4  14  17
## 6  5.0 34  29 11  35  10  27  21
## 7  5.0 57  46 13  11   1   9   2
## 8  5.0  3  32 14   9  47  28  19
## 9  5.0 25  18 59   8  26   7  20
## 10 5.0 16  19 55  31   6  25  18
## 11 4.5 38  56  6   7   3  34  26
## 12 4.5 42  33  5  38       1   3
## 13 4.5 36  27  7   5  33   3  32
## 14 4.5 54  44  8   1  27   5  31
## 15 4.5 19  16 30  22  54  33  38
## 16 4.0 10  15     39   2  36 4.0
## 17 4.0 48  41 26   2  23  22   5
## 18 4.0 47   9  1  32  19  38  10
## 19 4.0 15  10 52  28  18   4   8
## 20 4.0 40  49 23  41  28   2   9
## 21 4.0 43   1 47   3  40  39   6
## 22 4.0 64  52 28  15      17  40
## 23 4.0  4  43 20  58  17  37  46
## 24 4.0 28  47 43  25  60  44  39
## 25 3.5  9  53  3  24  34  10  47
## 26 3.5 49  40 17   4   9  32  11
## 27 3.5 51  13 46  37  14   6 3.5
## 28 3.5 24   4 22  19  20   8  36
## 29 3.5 50   6 38  34  52  48 3.5
## 30 3.5 52  64 15  55  31  61  50
## 31 3.5 58  55 64  10  30  50  14
## 32 3.5 61   8 44  18  51  26  13
## 33 3.5 60  12 50  36  13  15  51
## 34 3.5  6  60 37  29  25  11  52
## 35 3.5 46  38 56   6  57  52  48
## 36 3.5 13  57 51  33      16  28
## 37 3.5  B   5 34  27      23  61
## 38 3.0 11  35 29  12      18  15
## 39 3.0  1  54 40  16  44  21  24
## 40 3.0 20  26 39  59  21  56  22
## 41 3.0 59  17 58  20 3.0  59  17
## 42 3.0 12  50 57  60  61  64  56
## 43 3.0 21  23 24  63  59  46  55
## 44 3.0  B  14 32  53  39  24  59
## 45 3.0  5  51 60  56  63  55  58
## 46 3.0 35   7 27  50  64  43  23
## 47 2.5 18  24 21  61   8  51  25
## 48 2.5 17  63     52      29  35
## 49 2.5 26  20 63  64  58 2.5  26
## 50 2.5 29  42 33  46      31  30
## 51 2.5 27  45 36  57  32  47  33
## 52 2.5 30  22 19  48  29  35  34
## 53 2.0     25     44   U  57 2.0
## 54 2.0 14  39 61   B  15  59  64
## 55 2.0 62  31 10  30   B  45  43
## 56 2.0     11 35  45      40  42
## 57 2.0  7  36 42  51  35  53 2.0
## 58 2.0 31   2 41  23  49   B  45
## 59 2.0 41   B  9  40  43  54  44
## 60 1.5 33  34 45  42  24 1.5  33
## 61 1.5 32   3 54  47  42  30  37
## 62 1.0 55 1.0 55 1.0  55 1.0  55
## 63 1.0  2  48 49  43  45 1.0   2
## 64 1.0 22  30 31  49  46  42  54
roundsdf$id <- as.factor(1:64)

names(roundsdf) <- c("points", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "id")

The match function is then used to replace the opponent id with their pre-score, as shown below.

roundsdf$r1 <- predf$prescore[match(predf$id, roundsdf$r1)]
roundsdf$r2 <- predf$prescore[match(predf$id, roundsdf$r2)]
roundsdf$r3 <- predf$prescore[match(predf$id, roundsdf$r3)]
roundsdf$r4 <- predf$prescore[match(predf$id, roundsdf$r4)]
roundsdf$r5 <- predf$prescore[match(predf$id, roundsdf$r5)]
roundsdf$r6 <- predf$prescore[match(predf$id, roundsdf$r6)]
roundsdf$r7 <- predf$prescore[match(predf$id, roundsdf$r7)]

Add an average column to average the pre-score of each persons opponents (omitting NA values from the calculation)

roundsdf$avg <- rowMeans(roundsdf[,2:8], na.rm = TRUE)
roundsdf$avg <- round(roundsdf$avg, digits=0) 

Create the final data frame, rename the last column and write the results to a CSV file.

finaldf <- data.frame(name, state, points, prescore, roundsdf$avg)
colnames(finaldf)[5] <- "prescoreopp"
finaldf
##                          name state points prescore prescoreopp
## 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 LEMAN    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        1424
## 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 CORMICK    MI    2.0      853        1341
## 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(finaldf, file = "Chess.csv",row.names=FALSE)