【发布时间】:2017-12-12 22:59:35
【问题描述】:
我正在尝试在 R 中实现运动简单评分系统,但遇到了很多麻烦。我可以在 excel 中完成,您可以在此视频中看到:http://www.screencast.com/users/Sports-Reference/folders/PFR/media/cea8d1e3-ed91-431f-a0df-1336c03b1268
为了测试这一点,我使用的数据(基本上)与视频中的数据相同,您可以在此处访问:https://drive.google.com/file/d/0Bzr6jaapQdMRUFhpU0h4NDBNaTQ/view?usp=sharing
数据框的第一行可以这样构建,但是有206条记录:
dat$Week <- c(1,1,1)
dat$Team <- c("Arizona Cardinals", "Arizona Cardinals", "Arizona Cardinals")
dat$Location <- c("HOME", "AWAY", "HOME")
dat$Opponent <- c("San Francisco 49ers", "Jacksonville Jaguars", "Indianapolis Colts")
dat$Points.For <- c(16, 31, 10)
dat$Points.Against <- c(20, 17, 31)
我使用以下代码设置数据:
library(dplyr)
## Load data
dat <- read.csv("data/footballsrstestdata.csv", stringsAsFactors = FALSE)
## Delete last row
dat <- dat[-207,]
## Create MOV and adjusted MOV variables
dat <- mutate(dat, mov = Points.For - Points.Against)
dat <- mutate(dat, adjMOV = mapply(function(x, y)
{if(y == "HOME") x - 1.3529 else x + 1.3529}, dat$mov, dat$Location))
## Create SRS df
srsTable <- data.frame(teams = unique(dat$Team), stringsAsFactors = FALSE)
## Create average MOV
srsTable <- mutate(srsTable,
avgAdjMOV = sapply(teams, function(x) {
mean(dat$adjMOV[dat$Team == x])
}, USE.NAMES = FALSE))
## Create placeholder varaiables
dat$oSRS <- NA
srsTable$SOS <- NA
srsTable$SRS <- NA
在 excel 中,您将有两张相互引用的工作表,创建一个循环引用,该引用会迭代直到它们达到稳定。比赛数据中的每一行都有对手的 SRS,在球队 SRS 表上,SRS 将等于 avgAdjMOV + 比赛数据表中的平均对手 SRS。我假设我需要创建一个包含一系列方程的函数并使用optim 函数来解决它们,但无法弄清楚如何设置它以便它们在游戏数据数据帧和团队数据帧上工作同时。
有人对如何进行有任何想法吗? 谢谢!
【问题讨论】:
-
我对类似的问题感兴趣。你有没有想过这个问题??
-
不,从来没有得到任何答案...
标签: r optimization