library(XML)
library(httr)
library(BBmisc) # for sorting
sort.data.frame <- function(x, by){
# Author: Kevin Wright
# with some ideas from Andy Liaw
# http://tolstoy.newcastle.edu.au/R/help/04/07/1076.html
# x: A data.frame
# by: A one-sided formula using + for ascending and - for descending
# Sorting is left to right in the formula
# Useage is:
# library(nlme);
# data(Oats)
# sort(Oats, by= ~nitro-Variety)
if(by[[1]] != "~")
stop("Argument 'by' must be a one-sided formula.")
# Make the formula into character and remove spaces
formc <- as.character(by[2])
formc <- gsub(" ", "", formc)
# If the first character is not + or -, add +
if(!is.element(substring(formc, 1, 1), c("+", "-")))
formc <- paste("+", formc, sep = "")
# Extract the variables from the formula
vars <- unlist(strsplit(formc, "[\\+\\-]"))
vars <- vars[vars != ""] # Remove any extra "" terms
# Build a list of arguments to pass to "order" function
calllist <- list()
pos <- 1 # Position of + or -
for(i in 1:length(vars)){
varsign <- substring(formc, pos, pos)
pos <- pos + 1 + nchar(vars[i])
if(is.factor(x[, vars[i]])){
if(varsign == "-") {
calllist[[i]] <- -rank(x[, vars[i]])
} else {
calllist[[i]] <- rank(x[, vars[i]])
}
} else {
if(varsign == "-") {
calllist[[i]] <- -x[, vars[i]]
} else {
calllist[[i]] <- x[,vars[i]]
}
}
}
return(x[do.call("order", calllist), ])
}
# historical times for oot any%
# only shows the current best time for each player
oot_any <- readHTMLTable("http://zeldaspeedruns.com/leaderboards/oot/any")[[1]]
player_names <- as.character(oot_any$Player)
# grab profile for each player in oot any% speedrun leaderboards
num_players <- 5
# store oot profiles of each player in list
player_times <- vector("list", num_players)
names(player_times) <- player_names[1:num_players]
for(i in 1:num_players) {
url <- paste0("http://zeldaspeedruns.com/profiles/",player_names[i])
player_times[[i]] <- readHTMLTable(url)
html <- GET(url)
content2 <- content(html, as="text")
parsedHTML = htmlParse(content2, asText=TRUE)
game_names <- xpathSApply(parsedHTML,"//h3",xmlValue)
names(player_times[[i]]) = game_names
}
load("C:/Users/Nathan/Documents/oot_data.Rdata")
for(i in 1:num_players) { # remove unneeded columns; take only oot game data
player_times[[i]] <- player_times[[i]][which(names(player_times[[i]]) == "Ocarina of Time")]
player_times[[i]][[1]] <- player_times[[i]][[1]][,-c(3,5)]
player_times[[i]][[1]]$Player = names(player_times)[i]
}
oot_any_parsed <- player_times[[1]][[1]]
for(i in 2:num_players) {
oot_any_parsed <- rbind(oot_any_parsed, player_times[[i]][[1]])
}
oot_any_parsed <- oot_any_parsed[which(oot_any_parsed$Category=="Any%"),]
oot_any_parsed <- oot_any_parsed[,-1]
oot_any_parsed$Date <- as.Date(as.character(oot_any_parsed$Date), format="%m/%d/%Y")
oot_any_parsed$Time <- as.character(oot_any_parsed$Time)
oot_any_parsed$Seconds <- lapply(strsplit(oot_any_parsed$Time,":"),
function(x) as.numeric(x)[1]*3600 +
as.numeric(x)[2]*60 + as.numeric(x)[3])
oot_any_parsed$Seconds <- as.numeric(oot_any_parsed$Seconds)
sort(oot_any_parsed,by = ~ Seconds)
## Time Date Player Seconds
## 1 0:17:45 2015-07-10 skater82297 1065
## 2 0:17:47 2015-05-07 skater82297 1067
## 25 0:17:55 2015-03-16 Jodenstone 1075
## 3 0:18:03 2015-03-13 skater82297 1083
## 4 0:18:03 2015-03-13 skater82297 1083
## 5 0:18:03 2015-03-13 skater82297 1083
## 26 0:18:05 2015-03-10 Jodenstone 1085
## 27 0:18:07 2015-01-02 Jodenstone 1087
## 28 0:18:07 2015-03-05 Jodenstone 1087
## 29 0:18:10 2014-12-15 Jodenstone 1090
## 78 0:18:10 2014-07-20 Cosmo 1090
## 30 0:18:12 2014-12-07 Jodenstone 1092
## 6 0:18:18 2015-02-27 skater82297 1098
## 31 0:18:18 2014-10-17 Jodenstone 1098
## 91 0:18:19 2015-06-06 Aliensqueakytoy 1099
## 32 0:18:26 2014-10-17 Jodenstone 1106
## 33 0:18:29 2015-02-16 Jodenstone 1109
## 79 0:18:29 2014-07-17 Cosmo 1109
## 34 0:18:30 2014-09-07 Jodenstone 1110
## 80 0:18:32 2014-04-26 Cosmo 1112
## 35 0:18:33 2014-10-11 Jodenstone 1113
## 112 0:18:37 2015-06-23 ikswozol 1117
## 36 0:18:38 2014-08-21 Jodenstone 1118
## 37 0:18:39 2014-10-07 Jodenstone 1119
## 81 0:18:40 2014-04-19 Cosmo 1120
## 38 0:18:43 2014-10-02 Jodenstone 1123
## 7 0:18:50 2014-07-20 skater82297 1130
## 8 0:18:51 2014-07-13 skater82297 1131
## 82 0:18:51 2014-03-25 Cosmo 1131
## 9 0:18:52 2014-06-19 skater82297 1132
## 39 0:18:52 2014-08-12 Jodenstone 1132
## 10 0:18:55 2014-05-08 skater82297 1135
## 83 0:18:56 2014-03-17 Cosmo 1136
## 113 0:18:57 2014-11-25 ikswozol 1137
## 114 0:18:59 2014-11-19 ikswozol 1139
## 11 0:19:00 2014-02-28 skater82297 1140
## 12 0:19:05 2014-02-18 skater82297 1145
## 13 0:19:05 2014-02-18 skater82297 1145
## 14 0:19:05 2014-02-18 skater82297 1145
## 15 0:19:06 2014-02-06 skater82297 1146
## 16 0:19:10 2013-12-25 skater82297 1150
## 40 0:19:12 2014-08-09 Jodenstone 1152
## 115 0:19:14 2014-09-02 ikswozol 1154
## 84 0:19:15 2013-08-22 Cosmo 1155
## 41 0:19:16 2014-09-29 Jodenstone 1156
## 92 0:19:19 2015-01-05 Aliensqueakytoy 1159
## 17 0:19:20 2013-12-05 skater82297 1160
## 116 0:19:22 2014-08-01 ikswozol 1162
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 43 0:19:26 2014-04-16 Jodenstone 1166
## 18 0:19:27 2013-12-03 skater82297 1167
## 19 0:19:27 2013-12-03 skater82297 1167
## 44 0:19:27 2014-04-12 Jodenstone 1167
## 45 0:19:27 2014-05-21 Jodenstone 1167
## 117 0:19:27 2014-06-05 ikswozol 1167
## 93 0:19:29 2014-11-28 Aliensqueakytoy 1169
## 46 0:19:32 2014-04-09 Jodenstone 1172
## 20 0:19:33 2013-11-09 skater82297 1173
## 47 0:19:33 2014-04-08 Jodenstone 1173
## 85 0:19:35 2013-08-11 Cosmo 1175
## 48 0:19:37 2014-04-06 Jodenstone 1177
## 118 0:19:39 2014-06-04 ikswozol 1179
## 21 0:19:42 2013-10-15 skater82297 1182
## 94 0:19:46 2014-11-09 Aliensqueakytoy 1186
## 49 0:19:47 2014-04-04 Jodenstone 1187
## 50 0:19:47 2014-05-05 Jodenstone 1187
## 51 0:19:50 2014-03-25 Jodenstone 1190
## 95 0:19:50 2014-10-24 Aliensqueakytoy 1190
## 119 0:19:51 2014-05-14 ikswozol 1191
## 52 0:19:52 2014-03-25 Jodenstone 1192
## 120 0:19:54 2014-05-13 ikswozol 1194
## 53 0:19:56 2014-03-25 Jodenstone 1196
## 22 0:20:03 2013-10-05 skater82297 1203
## 54 0:20:09 2014-03-25 Jodenstone 1209
## 86 0:20:12 2013-08-06 Cosmo 1212
## 55 0:20:14 2014-03-21 Jodenstone 1214
## 121 0:20:21 2014-05-08 ikswozol 1221
## 96 0:20:26 2014-10-22 Aliensqueakytoy 1226
## 97 0:20:29 2014-10-15 Aliensqueakytoy 1229
## 122 0:20:34 2014-05-07 ikswozol 1234
## 56 0:20:38 2014-03-21 Jodenstone 1238
## 98 0:20:41 2014-10-06 Aliensqueakytoy 1241
## 57 0:20:51 2014-03-16 Jodenstone 1251
## 58 0:21:02 2014-09-02 Jodenstone 1262
## 87 0:21:56 2012-11-25 Cosmo 1316
view_record <- function(date="2014-05-01") {
tmp <- oot_any_parsed[which(oot_any_parsed$Date < date),]
tmp <- sort(tmp, by = ~ Seconds)
wr_players <- unique(tmp$Player)
return_rows <- numeric(0)
for(player in wr_players) {
return_rows <- c(return_rows, which(tmp$Player==player)[1])
}
tmp[return_rows,]
}
for(year in "2014") {
for(month in c("04","05","06")) {
for(day in c("01","02","03","04","05","06","07","08"))
print(view_record(date=paste0(year,"-",month,"-",day)))
}
}
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 51 0:19:50 2014-03-25 Jodenstone 1190
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 51 0:19:50 2014-03-25 Jodenstone 1190
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 51 0:19:50 2014-03-25 Jodenstone 1190
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 51 0:19:50 2014-03-25 Jodenstone 1190
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 49 0:19:47 2014-04-04 Jodenstone 1187
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 49 0:19:47 2014-04-04 Jodenstone 1187
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 48 0:19:37 2014-04-06 Jodenstone 1177
## Time Date Player Seconds
## 82 0:18:51 2014-03-25 Cosmo 1131
## 11 0:19:00 2014-02-28 skater82297 1140
## 48 0:19:37 2014-04-06 Jodenstone 1177
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 11 0:19:00 2014-02-28 skater82297 1140
## 43 0:19:26 2014-04-16 Jodenstone 1166
## 122 0:20:34 2014-05-07 ikswozol 1234
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 119 0:19:51 2014-05-14 ikswozol 1191
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 119 0:19:51 2014-05-14 ikswozol 1191
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 119 0:19:51 2014-05-14 ikswozol 1191
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 119 0:19:51 2014-05-14 ikswozol 1191
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 118 0:19:39 2014-06-04 ikswozol 1179
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 117 0:19:27 2014-06-05 ikswozol 1167
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 117 0:19:27 2014-06-05 ikswozol 1167
## Time Date Player Seconds
## 80 0:18:32 2014-04-26 Cosmo 1112
## 10 0:18:55 2014-05-08 skater82297 1135
## 42 0:19:23 2014-05-27 Jodenstone 1163
## 117 0:19:27 2014-06-05 ikswozol 1167