First I want to determine the columns that I will need in the final csv file:
data <- readLines("https://raw.githubusercontent.com/Raharijao/Spring2024_Data_607_CUNYSPS/main/Week4/Chess_data.txt")
## Warning in
## readLines("https://raw.githubusercontent.com/Raharijao/Spring2024_Data_607_CUNYSPS/main/Week4/Chess_data.txt"):
## incomplete final line found on
## 'https://raw.githubusercontent.com/Raharijao/Spring2024_Data_607_CUNYSPS/main/Week4/Chess_data.txt'
#Extracting the player number
pnu_pattern <- "\\d+ \\| "
pnu <- str_extract_all(data, pnu_pattern)
pnu <- unlist(pnu)
pnu <- gsub(' \\| ', "", pnu)
print(pnu)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
## [46] "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60"
## [61] "61" "62" "63" "64"
#Extracting the player’s name
pn_pattern <- "\\| [A-Z]([^|]+) \\|"
pn <- str_extract_all(data, pn_pattern)
pn <- unlist(pn)
#remove extra characters
pn <- gsub('\\|', "", pn)
#remove header rows
pn <- pn[-c(1,2)]
#remove extra spaces
pn <- trimws(pn)
print(pn)
## [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"
#Extracting the player’s state
ps_pattern <- "[A-Z][A-Z] \\|"
ps <- str_extract_all(data, ps_pattern)
ps <- unlist(ps)
ps <- gsub(' \\|', "", ps)
print(ps)
## [1] "ON" "MI" "MI" "MI" "MI" "OH" "MI" "MI" "ON" "MI" "MI" "MI" "MI" "MI" "MI"
## [16] "MI" "MI" "MI" "MI" "MI" "ON" "MI" "ON" "MI" "MI" "ON" "MI" "MI" "MI" "ON"
## [31] "MI" "ON" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI"
## [46] "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI" "MI"
## [61] "ON" "MI" "MI" "MI"
#Extracting the player’s total point
pts_pattern <- "\\d\\.\\d+ \\|"
ptS <- str_extract_all(data, pts_pattern)
ptS <- unlist(ptS)
ptS <- gsub(' \\|', "", ptS)
print(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"
#Extracting the player’s pre chess rating
pcrt_pattern <- "R: ([^-]+)-"
pcr_pattern <- "R:\\s*(\\d{1,4})"
pcr <- str_extract_all(data, pcr_pattern)
pcr <- unlist(pcr)
pcr <- gsub('R: ', "", pcr)
#pcr <- gsub('-', "", pcr)
pcr <- trimws(pcr)
print(pcr)
## [1] "1794" "1553" "1384" "1716" "1655" "1686" "1649" "1641" "1411" "1365"
## [11] "1712" "1663" "1666" "1610" "1220" "1604" "1629" "1600" "1564" "1595"
## [21] "1563" "1555" "1363" "1229" "1745" "1579" "1552" "1507" "1602" "1522"
## [31] "1494" "1441" "1449" "1399" "1438" "1355" "980" "1423" "1436" "1348"
## [41] "1403" "1332" "1283" "1199" "1242" "377" "1362" "1382" "1291" "1056"
## [51] "1011" "935" "1393" "1270" "1186" "1153" "1092" "917" "853" "967"
## [61] "955" "1530" "1175" "1163"
#Building the data frame (to be used in next step)
df <- data.frame(pn,ps,ptS,pcr)
df$pcr <- as.integer(df$pcr)
#Extracting a list of all the oppopnents for each row
pop_pattern <- "[A-Z] \\s*\\d+"
pop <- str_extract_all(data, pop_pattern)
#Filters out blank lists with no opponent info
pop <- pop[lengths(pop) > 0]
#Clean out non player ID characters
pop <- lapply(pop, function(x) gsub("[A-Z] ", "", x))
# #Make it into a list of number lists
pop <- lapply(pop, unlist)
pop <- lapply(pop, function(sublist) {
as.numeric(sublist)
})
print(pop)
## [[1]]
## [1] 39 21 18 14 7 12 4
##
## [[2]]
## [1] 63 58 4 17 16 20 7
##
## [[3]]
## [1] 8 61 25 21 11 13 12
##
## [[4]]
## [1] 23 28 2 26 5 19 1
##
## [[5]]
## [1] 45 37 12 13 4 14 17
##
## [[6]]
## [1] 34 29 11 35 10 27 21
##
## [[7]]
## [1] 57 46 13 11 1 9 2
##
## [[8]]
## [1] 3 32 14 9 47 28 19
##
## [[9]]
## [1] 25 18 59 8 26 7 20
##
## [[10]]
## [1] 16 19 55 31 6 25 18
##
## [[11]]
## [1] 38 56 6 7 3 34 26
##
## [[12]]
## [1] 42 33 5 38 1 3
##
## [[13]]
## [1] 36 27 7 5 33 3 32
##
## [[14]]
## [1] 54 44 8 1 27 5 31
##
## [[15]]
## [1] 19 16 30 22 54 33 38
##
## [[16]]
## [1] 10 15 39 2 36
##
## [[17]]
## [1] 48 41 26 2 23 22 5
##
## [[18]]
## [1] 47 9 1 32 19 38 10
##
## [[19]]
## [1] 15 10 52 28 18 4 8
##
## [[20]]
## [1] 40 49 23 41 28 2 9
##
## [[21]]
## [1] 43 1 47 3 40 39 6
##
## [[22]]
## [1] 64 52 28 15 17 40
##
## [[23]]
## [1] 4 43 20 58 17 37 46
##
## [[24]]
## [1] 28 47 43 25 60 44 39
##
## [[25]]
## [1] 9 53 3 24 34 10 47
##
## [[26]]
## [1] 49 40 17 4 9 32 11
##
## [[27]]
## [1] 51 13 46 37 14 6
##
## [[28]]
## [1] 24 4 22 19 20 8 36
##
## [[29]]
## [1] 50 6 38 34 52 48
##
## [[30]]
## [1] 52 64 15 55 31 61 50
##
## [[31]]
## [1] 58 55 64 10 30 50 14
##
## [[32]]
## [1] 61 8 44 18 51 26 13
##
## [[33]]
## [1] 60 12 50 36 13 15 51
##
## [[34]]
## [1] 6 60 37 29 25 11 52
##
## [[35]]
## [1] 46 38 56 6 57 52 48
##
## [[36]]
## [1] 13 57 51 33 16 28
##
## [[37]]
## [1] 5 34 27 23 61
##
## [[38]]
## [1] 11 35 29 12 18 15
##
## [[39]]
## [1] 1 54 40 16 44 21 24
##
## [[40]]
## [1] 20 26 39 59 21 56 22
##
## [[41]]
## [1] 59 17 58 20
##
## [[42]]
## [1] 12 50 57 60 61 64 56
##
## [[43]]
## [1] 21 23 24 63 59 46 55
##
## [[44]]
## [1] 14 32 53 39 24 59
##
## [[45]]
## [1] 5 51 60 56 63 55 58
##
## [[46]]
## [1] 35 7 27 50 64 43 23
##
## [[47]]
## [1] 18 24 21 61 8 51 25
##
## [[48]]
## [1] 17 63 52 29 35
##
## [[49]]
## [1] 26 20 63 64 58
##
## [[50]]
## [1] 29 42 33 46 31 30
##
## [[51]]
## [1] 27 45 36 57 32 47 33
##
## [[52]]
## [1] 30 22 19 48 29 35 34
##
## [[53]]
## [1] 25 44 57
##
## [[54]]
## [1] 14 39 61 15 59 64
##
## [[55]]
## [1] 62 31 10 30 45 43
##
## [[56]]
## [1] 11 35 45 40 42
##
## [[57]]
## [1] 7 36 42 51 35 53
##
## [[58]]
## [1] 31 2 41 23 49 45
##
## [[59]]
## [1] 41 9 40 43 54 44
##
## [[60]]
## [1] 33 34 45 42 24
##
## [[61]]
## [1] 32 3 54 47 42 30 37
##
## [[62]]
## [1] 55
##
## [[63]]
## [1] 2 48 49 43 45
##
## [[64]]
## [1] 22 30 31 49 46 42 54
#Extracting all of the opponent’s average score from the data frame and then averaging it
#For each sublist in the main list
popt <- lapply(pop, function(numb_list) {
#For each items in the sublist
t_scores <- lapply(numb_list, function(number) {
if (number %in% rownames(df)) {
return(df[number, "pcr"])
} else {
return(NA)
}
})
av <- round(mean(unlist(t_scores)))
return(av)
})
popt <- unlist(popt)
print(popt)
## [1] 1605 1469 1564 1574 1501 1519 1372 1468 1523 1554 1468 1506 1498 1515 1484
## [16] 1386 1499 1480 1426 1411 1470 1300 1214 1357 1363 1507 1222 1522 1314 1144
## [31] 1260 1379 1277 1375 1150 1388 1385 1539 1430 1391 1248 1150 1107 1327 1152
## [46] 1358 1392 1356 1286 1296 1356 1495 1345 1206 1406 1414 1363 1391 1319 1330
## [61] 1327 1186 1350 1263
#Building final data frame and load into csv
df$popt <- as.integer(popt)
#Rename columns
df <- rename(df,
Player_name = pn ,
Player_state = ps,
Player_total_points = ptS,
Player_pre_rating = pcr,
Player_op_avg_prerat = popt
)
write.csv(df, "Chess_data.csv", row.names = TRUE)
These are just chunks of codes I used to experiment
data_test <- c("aaa bfg gl","klmno jjj", "kop lll ooo")
data_test2 <- c("aaa", "abc", "bbbbb", "cccd", "eeef", "ggghhh")
pattern <- "(.)\\1\\1"
matching_elements <- str_extract_all(data_test, pattern)
matching_elements <- unlist(matching_elements)
print(matching_elements)
## [1] "aaa" "jjj" "lll" "ooo"
test <- "|6.0 |W 39|W 21|W 18|W 14|W 7|D 12|D 4|"
pop_pattern <- "[A-Z]\\s*\\d+"
testr <- str_extract_all(test, pop_pattern)
print(testr)
## [[1]]
## [1] "W 39" "W 21" "W 18" "W 14" "W 7" "D 12" "D 4"
data_test <- c("R: 123lkj")
pattern <- "R: (\\d{1,4})"
matching_elements <- str_extract_all(data_test, pattern)
matching_elements <- unlist(matching_elements)
print(matching_elements)
## [1] "R: 123"