library(data.table)
library(knitr)
Read in Data
dat = read.delim2('tournament.txt', sep = '\t')
vec.names = dat[1:2, ]
dat = dat[apply(dat, 1, function(x) grepl(x, "(\\-)+")),]
lst.dat = strsplit(dat, split = "\\s*\\|")
mat.dat = t(do.call(cbind, lst.dat))
dt.dat = data.table(mat.dat)
setnames(dt.dat, c("Pair", "Player.Name", "Total.Pts", "Round.1", "Round.2", "Round.3", "Round.4", "Round.5", "Round.6", "Round.7"))
dt.dat[, c("Player.Id", "Rating.Change"):= tstrsplit(Player.Name, "\\s*\\/\\s*")]
Participants and State
dt.participants = dt.dat[, .(Pair, Player.Id)]
dt.participants[grepl("\\d+", Player.Id), Id := Player.Id]
dt.participants[grepl("[a-z]+", Pair, ignore.case = T), State := Pair]
dt.participants[, New.Id := shift(Id, -1L)]
dt.participants[is.na(Id), Id := New.Id][, New.Id := NULL]
dt.participants[, New.State := shift(State, -1L)]
dt.participants[is.na(State), State := New.State][, New.State := NULL]
dt.participants = dt.participants[grepl( "[A-Z]+", Player.Id),]
kable(head(dt.participants))
| 1 |
GARY HUA |
15445895 |
ON |
| 2 |
DAKSHESH DARURI |
14598900 |
MI |
| 3 |
ADITYA BAJAJ |
14959604 |
MI |
| 4 |
PATRICK H SCHILLING |
12616049 |
MI |
| 5 |
HANSHI ZUO |
14601533 |
MI |
| 6 |
HANSEN SONG |
15055204 |
OH |
Total Points per Player
dt.participants.merged = merge(dt.dat[grepl("\\d+", Pair), .(Pair, Total.Pts)], dt.participants, by = "Pair")
kable(head(dt.participants.merged))
| 1 |
6.0 |
GARY HUA |
15445895 |
ON |
| 2 |
6.0 |
DAKSHESH DARURI |
14598900 |
MI |
| 3 |
6.0 |
ADITYA BAJAJ |
14959604 |
MI |
| 4 |
5.5 |
PATRICK H SCHILLING |
12616049 |
MI |
| 5 |
5.5 |
HANSHI ZUO |
14601533 |
MI |
| 6 |
5.0 |
HANSEN SONG |
15055204 |
OH |
Rating - Add Participants Rating
dt.ratings = dt.dat[!is.na(Rating.Change), .(Player.Id, Rating.Change)]
dt.ratings[, Rating.Change := gsub("R\\:", "", Rating.Change)]
dt.ratings[, c("Pre.Rating", "Post.Rating") := tstrsplit(Rating.Change, "\\s*\\->\\s*")]
dt.participants.merged = merge(dt.participants.merged, dt.ratings[,.(Player.Id, Pre.Rating)], by.x = "Id", by.y = "Player.Id")
dt.participants.merged[, Pair := as.integer(Pair)]
Opponents - Average Rating
dt.opponents = dt.dat[grepl("\\d+",Pair), .(Pair, Round.1, Round.2, Round.3, Round.4, Round.5, Round.6, Round.7)]
dt.opponents= as.data.table(apply(dt.opponents, 2, function(x) x= as.integer(gsub("[A-Z]\\s*(\\d+)", "\\1", x))))
mlt.opponents = melt(dt.opponents, id.vars = "Pair", value.name = "Opp.Pair", variable.name = "Round")
dt.opponents = merge(mlt.opponents, dt.participants.merged[, .(Pair, Pre.Rating)], by.x = "Opp.Pair", by.y = "Pair")
dt.opponents[grepl("P\\d+", Pre.Rating), Pre.Rating := gsub("P\\d+", "", Pre.Rating)]
dt.opponents[, Pre.Rating := as.integer(Pre.Rating)]
dt.opponents.avg.rating = dt.opponents[, mean(Pre.Rating, na.rm = T), by = "Pair"]
setnames(dt.opponents.avg.rating, "V1", "Avg.Rating")
Merge
dt.FINAL.TABLE = dt.opponents.avg.rating[dt.participants.merged, on = "Pair"]
dt.FINAL.TABLE = dt.FINAL.TABLE[order(Pair), .(Player.Name = Player.Id, State, Total.Pts, Pre.Rating, Avg.Rating)]
write.csv(dt.FINAL.TABLE, 'TOURNAMENT_FINAL.CSV', row.names = F)
kable(dt.FINAL.TABLE)
| GARY HUA |
ON |
6.0 |
1794 |
1605.286 |
| DAKSHESH DARURI |
MI |
6.0 |
1553 |
1469.286 |
| ADITYA BAJAJ |
MI |
6.0 |
1384 |
1563.571 |
| PATRICK H SCHILLING |
MI |
5.5 |
1716 |
1573.571 |
| HANSHI ZUO |
MI |
5.5 |
1655 |
1500.857 |
| HANSEN SONG |
OH |
5.0 |
1686 |
1518.714 |
| GARY DEE SWATHELL |
MI |
5.0 |
1649 |
1372.143 |
| EZEKIEL HOUGHTON |
MI |
5.0 |
1641P17 |
1468.429 |
| STEFANO LEE |
ON |
5.0 |
1411 |
1523.143 |
| ANVIT RAO |
MI |
5.0 |
1365 |
1554.143 |
| CAMERON WILLIAM MC LEMAN |
MI |
4.5 |
1712 |
1467.571 |
| KENNETH J TACK |
MI |
4.5 |
1663 |
1506.167 |
| TORRANCE HENRY JR |
MI |
4.5 |
1666 |
1497.857 |
| BRADLEY SHAW |
MI |
4.5 |
1610 |
1515.000 |
| ZACHARY JAMES HOUGHTON |
MI |
4.5 |
1220P13 |
1483.857 |
| MIKE NIKITIN |
MI |
4.0 |
1604 |
1385.800 |
| RONALD GRZEGORCZYK |
MI |
4.0 |
1629 |
1498.571 |
| DAVID SUNDEEN |
MI |
4.0 |
1600 |
1480.000 |
| DIPANKAR ROY |
MI |
4.0 |
1564 |
1426.286 |
| JASON ZHENG |
MI |
4.0 |
1595 |
1410.857 |
| DINH DANG BUI |
ON |
4.0 |
1563P22 |
1470.429 |
| EUGENE L MCCLURE |
MI |
4.0 |
1555 |
1300.333 |
| ALAN BUI |
ON |
4.0 |
1363 |
1213.857 |
| MICHAEL R ALDRICH |
MI |
4.0 |
1229 |
1357.000 |
| LOREN SCHWIEBERT |
MI |
3.5 |
1745 |
1363.286 |
| MAX ZHU |
ON |
3.5 |
1579 |
1506.857 |
| GAURAV GIDWANI |
MI |
3.5 |
1552 |
1221.667 |
| SOFIA ADINA STANESCU-BELLU |
MI |
3.5 |
1507 |
1522.143 |
| CHIEDOZIE OKORIE |
MI |
3.5 |
1602P6 |
1313.500 |
| GEORGE AVERY JONES |
ON |
3.5 |
1522 |
1144.143 |
| RISHI SHETTY |
MI |
3.5 |
1494 |
1259.857 |
| JOSHUA PHILIP MATHEWS |
ON |
3.5 |
1441 |
1378.714 |
| JADE GE |
MI |
3.5 |
1449 |
1276.857 |
| MICHAEL JEFFERY THOMAS |
MI |
3.5 |
1399 |
1375.286 |
| JOSHUA DAVID LEE |
MI |
3.5 |
1438 |
1149.714 |
| SIDDHARTH JHA |
MI |
3.5 |
1355 |
1388.167 |
| AMIYATOSH PWNANANDAM |
MI |
3.5 |
980P12 |
1384.800 |
| BRIAN LIU |
MI |
3.0 |
1423 |
1539.167 |
| JOEL R HENDON |
MI |
3.0 |
1436P23 |
1429.571 |
| FOREST ZHANG |
MI |
3.0 |
1348 |
1390.571 |
| KYLE WILLIAM MURPHY |
MI |
3.0 |
1403P5 |
1248.500 |
| JARED GE |
MI |
3.0 |
1332 |
1149.857 |
| ROBERT GLEN VASEY |
MI |
3.0 |
1283 |
1106.571 |
| JUSTIN D SCHILLING |
MI |
3.0 |
1199 |
1327.000 |
| DEREK YAN |
MI |
3.0 |
1242 |
1152.000 |
| JACOB ALEXANDER LAVALLEY |
MI |
3.0 |
377P3 |
1357.714 |
| ERIC WRIGHT |
MI |
2.5 |
1362 |
1392.000 |
| DANIEL KHAIN |
MI |
2.5 |
1382 |
1355.800 |
| MICHAEL J MARTIN |
MI |
2.5 |
1291P12 |
1285.800 |
| SHIVAM JHA |
MI |
2.5 |
1056 |
1296.000 |
| TEJAS AYYAGARI |
MI |
2.5 |
1011 |
1356.143 |
| ETHAN GUO |
MI |
2.5 |
935 |
1494.571 |
| JOSE C YBARRA |
MI |
2.0 |
1393 |
1345.333 |
| LARRY HODGE |
MI |
2.0 |
1270 |
1206.167 |
| ALEX KONG |
MI |
2.0 |
1186 |
1406.000 |
| MARISA RICCI |
MI |
2.0 |
1153 |
1414.400 |
| MICHAEL LU |
MI |
2.0 |
1092 |
1363.000 |
| VIRAJ MOHILE |
MI |
2.0 |
917 |
1391.000 |
| SEAN M MC CORMICK |
MI |
2.0 |
853 |
1319.000 |
| JULIA SHEN |
MI |
1.5 |
967 |
1330.200 |
| JEZZEL FARKAS |
ON |
1.5 |
955P11 |
1327.286 |
| ASHWIN BALAJI |
MI |
1.0 |
1530 |
1186.000 |
| THOMAS JOSEPH HOSMER |
MI |
1.0 |
1175 |
1350.200 |
| BEN LI |
MI |
1.0 |
1163 |
1263.000 |