如何解析R中的棒球盒得分

时间:2012-06-21 19:04:43

标签: string r

我正在研究retrosheet.org的棒球数据研究项目。我想为每个小组(Vis1,Home1,Vis2,Home2等)中每个小组的得分创建变量。问题是盒子得分的变量编码奇怪。每个团队都有自己的整个游戏变量,每个团队都有一个值。因为前导零被切断值“12(10)1X”意味着球队在前4局没有得分,在第五局得分一次,在第六局得分两次,在第七局得分十次,一次在第八,他们没有必要打第九,因为他们在那一点上赢了。

有什么建议吗?我不知所措。 ()让我最为困惑。

3 个答案:

答案 0 :(得分:2)

这个讲座中有一个例子在useR! 2012年可能提供更多针对您的棒球项目的信息。 你可以找到它here.

答案 1 :(得分:1)

我是爱尔兰人,住在威尔士,对棒球没有任何线索,但我想我记得听说最多只有9局???? (老实说......没有头绪!!!)

bbscore = function(x)
{
 scores = c()
 score = unlist(strsplit(x,split=""))
 i= 1
 while(i<length(score)+1)
 {
   if(score[i]=="(")
   {
     scores = c(scores,paste(score[i+1],score[i+2],sep=""))
     i = i+4
   }
   scores = c(scores,score[i])
   i = i+1
 }
 return(scores)
}
> x
[1] "12(10)1X"
> bbscore(x)
[1] "0"  "0"  "0"  "0"  "1"  "2"  "10" "1"  "X" 

> scores.df = read.csv("GL1995.TXT",header=F)
> head(scores.df$V20)
[1] 200030300 000000000 000300020 000000010 100100010 001002300
1355 Levels: (11)00033102 00000000 000000000 0000000000 ... 710001001
> scores.df$V20 = as.character(scores.df$V20)
> V20.1995.scores = lapply(scores.df$V21, bbscore)
> V20.1995.scores = lapply(scores.df$V20, bbscore)
> V20.1995.scores[[1]]
[1] "2" "0" "0" "0" "3" "0" "3" "0" "0"
> V20.1995.scores[[2]]
[1] "0" "0" "0" "0" "0" "0" "0" "0" "0"
> V20.1995.scores[[3]]
[1] "0" "0" "0" "3" "0" "0" "0" "2" "0"

当然你必须做一些更好的操作才能让他们进入数字并处理X's,如果还有其他任何意外的角色,除了受到9局的假设之外,这将会中断。

修改 我删除了9局的规定,并展示了如何为整个专栏做这个(假设你所说的分数确实是csv文件中的第20个变量)。不同数量的局比赛需要额外的进球。 do.call(rbind,...)无效。找到最长的游戏并将"X"添加到最后以使它们长度相同?也许?我不确定,但我认为这个问题至少得到了回答。

答案 2 :(得分:1)

迟到的回答,但是......

有一个新的R包用于从MLB server获取数据,包括盒子得分等等。可能值得一看!