Ultimate Runner 2019 : 1st Seedlist in R

The first seeds have been released for the Ultimate Runner 2019, a June 29th multi-distance running event coordinated by the Twin City Track Club in Winston-Salem, North Carolina.

I used R and regular expressions to extract columnar data from an emailed non-fixed width table containing names, gender, age, and 1-mile seed times.

Emailed first seeding list for the Ultimate Runner 2019. There are 108 participants and a waiting list for this popular multi-distance running event.

You can download the CSV file containing the structured data here.

I used the read_table function of the readr package to convert the emailed seed times into an R data frame. This function took the flat text file (copied and pasted) and eliminated the carriage return and newline special characters so each person was correctly on a separate row, unlike read_file().

Then, I experimented with regex101.com until I identified regular expressions that could convert the single-column entries like:


Column headers present

The INFO column header was added by me into the .TXT file pasted from the email body. You can also see a variety of stringr R functions in my code like str_sub. Mile_Seed features an obviation of the third argument for str_sub given I want the 7th-to-the-last character (-7) and then everything forward. Name_Age captures everything (.*?) that ends in two numbers (\\d\\d), and then nothing further from the value (i.e., knocks off the Mile_Seed).

ult2019 <- read_table('C:/Users/Packr1/Documents/Personal/Track/UltimateRunner/Heats_2019.txt')
ult2019 <- ult2019 %>% 
    mutate(Name_Age = str_extract(INFO, "(.*?)( \\d\\d)"),
                Age = as.numeric(str_sub(Name_Age, -2)),
                Sex = str_sub(Name_Age, -4, -4),
              Name  = str_trim(sub('(M|F)(\\s).*', '', Name_Age)),
          Mile_Seed = str_sub(INFO, -7)) %>% 
    select(Name,	Age,	Sex,	Mile_Seed)

ult2019_Rick <- ult2019 %>% 
    dplyr::filter(Age >= 35 & Age <= 39 & Sex == 'M')

ult2019_Ryan <- ult2019 %>% 
    dplyr::filter(Age >= 30 & Age <= 34 & Sex == 'F')

write.csv(ult2019, 'C:/Users/Packr1/Documents/Personal/Track/UltimateRunner/UltimateRunner_2019_Seed1.csv',
          row.names = FALSE)

I am a 38-year-old male and I explored my competition thus far, recognizing that some will be replaced by those on the waiting-list as they drop-out. Runners are generally scored in 5-year age groups (35-39 in my case).

I recently changed my seed time to 5:48 but it does appear so far that I (Rick Pack) am set to do quite well in my age group. The Ultimate Runner attracts more distance runners than sprinters. Ranking well in the mile suggests that only if one of the five dramatically outperforms in the 5k or is a surprisingly strong sprinter, I will win my age group.

This blog writer (Rick Pack) on the far-right (#863) at the start of the 50m at the June 15, 2019 Charleston, SC “Open and Masters Track Classic”, coordinated by the Charleston Running Club. To his left (#849) is fellow North Carolina runner, Piedmont Pacers Track Club teammate, and a rare strong competitor in both powerlifting and running events, Matt Holtry.

The Ultimate Runner consists of:

1 Mile, 400m, 800m, 100m, 5k

My times last year were:

6:03, 54.3, 2:37, 12.4, 25:38

I then explored those in my wife’s (Ryan Pack) age group.

My wife’s competition is stiff!

Ryan Pack, finishing the 200m at the June 15, 2019 Charleston, SC “Open and Masters Track Classic”, coordinated by the Charleston Running Club. Look at that University of Kentucky hat!

Regardless, all have fun at the Ultimate Runner at Hanes Park Track in Winston-Salem, NC. We emerge satisfied after the lengthy final event, the 5k, and go to dinner to receive our well-earned shirts and awards. We also commensurate about the muscle aches we will feel the next day.

Stretch well and run hard my friends.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s