2

私はretrosheet.orgの野球データを使った研究プロジェクトに取り組んでいます。各イニング(Vis1、Home1、Vis2、Home2など)の各チームのスコアの変数を作成したいと思います。問題は、ボックススコアの変数が奇妙にコーディングされていることです。各チームにはゲーム全体の独自の変数があり、各イニングは1つの値を取得します。先行ゼロは「12(10)1X」の値で切り取られるため、チームは最初の4イニングで得点せず、5回に1回、6回に2回、7回に10回、 8位で、その時点で勝っていたので、9位でプレーする必要はありませんでした。

何かアドバイス?私は途方に暮れています。()は私を最も混乱させます。

4

3 に答える 3

2

userR でのこのトークに例があります。2012 では、あなたの野球プロジェクトに固有の詳細情報が提供される場合があります。ここで見つけることができます

于 2012-06-21T23:16:40.773 に答える
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を処理するには、さらにいくつかの操作を行う必要があります。また、9イニングの仮定に注意を払うことに加えて、他の予期しない文字がある場合、これは壊れます。

編集: 私は9イニングの規定を削除し、列全体でこれを行う方法を示しました(あなたが話したスコアが実際にcsvファイルの20番目の変数であると仮定します)。イニング数が異なる場合は、追加の処理が必要です。do.call(rbind,...)動作しません。最長のゲームを見つけて"X"、最後に'を追加して、すべて同じ長さにしますか?多分?よくわかりませんが、少なくともこの質問には答えられていると思います。

于 2012-06-21T23:30:51.970 に答える
1

返事が遅くなりましたが…

ボックス スコアなど、 MLB サーバーからデータをフェッチするための新しい R パッケージがあります。一見の価値ありかも!

于 2013-08-10T17:49:16.570 に答える