any libraries need to be imported
library(readr)
library(stringr)
library(plyr)
skipping 4 because of headers
importtxt <- read_lines("tournamentinfo.txt", skip=4)
playerbase is a data frame all players who participated
playerbase <- data.frame(PairNum=integer(),
PlayerName=character(),
PlayerState=character(),
TotalPoints=integer(),
PlayerPreRating=integer())
using regex, we read and load data into the playerbase df
pair_num <- unlist(str_extract(unlist(str_extract_all(importtxt, pattern = "[:digit:]{1,}[:blank:](?=\\|)")), pattern = "[:digit:]{1,}"))
opo_tmp <- unlist(str_extract_all(importtxt, pattern ="(?<=\\|)[:blank:][:alpha:]{1,}[[:blank:](([:alpha:]*){1,}|([:alpha:]*\\-[:alpha:]*){1,}]*(?=\\|)"))
player_names <- trimws(unlist(str_extract(opo_tmp, pattern = "[:alpha:]{1,}[:blank:][:alpha:]+[[:blank:](([:alpha:]+)|([:alpha:]+\\-[:alpha:]+))]*")), "r")
player_state <- unlist(str_extract(unlist(str_extract_all(importtxt, pattern = "[:space:][:upper:]{2}[:blank:](?=\\|)")), pattern = "[:alpha:]{2}"))
total_points <- unlist(str_extract_all(importtxt, pattern = "[:digit:]\\.[:digit:]"))
player_prerating <- unlist(str_extract(unlist(str_extract_all(importtxt, pattern = "R\\:[:blank:]+\\d{1,4}")), pattern = "[:digit:]{1,4}"))
playerbase <- data.frame(pair_num,
player_names,
player_state,
total_points,
player_prerating)
opponentbase extracts the list of pair numbers of the oppoents that a single player went against and completed the match (win, draw, or lose)
tmp <- str_extract_all(importtxt, pattern = "(?<=\\|)(W|D|L)[:blank:]+[:digit:]+(?=\\|)")
tmp <- tmp[lapply(tmp,length)>0]
opponent_num <- str_extract_all(as.character(tmp), pattern = "[:digit:]+")
opponentbase <- list(pair_num,opponent_num)
avg_oppopreranking_all calculates the average rating of the all opponents that a player went up against
avg_oppopreranking_all <- vector('integer')
for (x in unlist(playerbase[[1]])) {
oppo_played <- playerbase[unlist(opponentbase[[2]][as.integer(x)]),]
oppo_prerankings <- strtoi(as.character(oppo_played$player_prerating))
avg_oppopreranking <- round(mean(oppo_prerankings), digits = 0)
avg_oppopreranking_all <- append(avg_oppopreranking_all,as.integer(avg_oppopreranking), after = length(avg_oppopreranking_all))
}
prep data for exporting
export_df <- data.frame(PlayerName = player_names,
PlayerState = player_state,
TotalPoints = format(total_points, nsmall = 1),
PlayerPreRating = as.integer(player_prerating),
AvgPreRating_Opponents = avg_oppopreranking_all)
export the data frame as
write.csv(export_df,'results.csv')