【发布时间】:2016-02-23 03:59:03
【问题描述】:
我确定这个问题之前已经提出过,但想就我的具体问题提供一些意见。作为对您的帮助的回报,我将使用一个有趣的例子。
Sean Lahman 提供了 MLB 棒球统计数据的庞大数据集,可在他的网站 (http://www.seanlahman.com/baseball-archive/statistics/) 上免费获取。
我想用这些数据来回答以下问题:美国职业棒球大联盟每十年记录的每场比赛的平均本垒打数是多少?
下面我已经粘贴了所有相关的脚本:
teamdata = read.csv("Teams.csv", header = TRUE)
decades = c(1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010,2020)
i = 0
meanhomers = c()
for(i in c(1:length(decades))){
meanhomers[i] = mean(teamdata$HR[teamdata$yearID>=decades[i] & teamdata$yearID<decades[i+1]]);
i = i+1
}
我的主要问题是,如何在不使用可怕的 for 循环的情况下确定这个答案?
附带问题:什么简单的脚本会为我生成 decades 向量?
(对于那些对棒球问题的答案感兴趣的人,请参阅下文。)
meanhomers
[1] 4.641026 23.735849 34.456522 20.421053 25.755682 61.837500 84.012500
[8] 80.987500 130.375000 132.166667 120.093496 126.700000 148.737410 173.826667
[15] 152.973333 NaN
为清楚起见进行编辑:原来我回答了错误的问题;上面提供的答案表示每支球队每年的本垒打数,而不是每场比赛。稍微修正一下分母就会得到正确的结果。
【问题讨论】:
-
i = 0和i = i+1在这段代码中都没有执行任何有用的操作。 -
这些数据集也可以在 R 包中获得 Lahman