gpt4 book ai didi

r - 避免 R 中的 For 循环

转载 作者:行者123 更新时间:2023-12-04 10:45:12 27 4
gpt4 key购买 nike

我确定这个问题之前已经提出过,但想就我的具体问题提供一些意见。作为对您帮助的返回,我将使用一个有趣的示例。

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 循环的情况下确定这个答案?

附带问题:什么简单的脚本会为我生成几十年的向量?

(对于那些对棒球问题的答案感兴趣的人,请参见下文。)
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

为清楚起见进行编辑:原来我回答了错误的问题;上面提供的答案表示每支球队每年的本垒打次数,而不是每场比赛。稍微修正分母就会得到正确的结果。

最佳答案

这是一个 data.table 示例。因为其他人展示了如何使用 cut ,我采取了另一条路线将数据拆分为几十年:

teamdata[,list(HRperYear=mean(HR)),by=10*floor((yearID)/10)]

然而,最初的问题提到了每场比赛的平均 HR,而不是每年(尽管代码和答案清楚地涉及每年的 HR)。

以下是如何计算每场比赛的平均 HR(以及每年每支球队的平均比赛):
teamdata[,list(HRperYear=mean(HR),HRperGame=sum(HR)/sum(G),games=mean(G)),by=10*floor(yearID/10)]

floor HRperYear HRperGame games
1: 1870 4.641026 0.08911866 52.07692
2: 1880 23.735849 0.21543555 110.17610
3: 1890 34.456522 0.25140108 137.05797
4: 1900 20.421053 0.13686067 149.21053
5: 1910 25.755682 0.17010657 151.40909
6: 1920 61.837500 0.40144445 154.03750
7: 1930 84.012500 0.54593453 153.88750
8: 1940 80.987500 0.52351325 154.70000
9: 1950 130.375000 0.84289640 154.67500
10: 1960 132.166667 0.81977946 161.22222
11: 1970 120.093496 0.74580935 161.02439
12: 1980 126.700000 0.80990313 156.43846
13: 1990 148.737410 0.95741873 155.35252
14: 2000 173.826667 1.07340167 161.94000
15: 2010 152.973333 0.94427984 162.00000

(1980 年代和 1990 年代的低平均比赛总数是由于 1981 年和 1994-5 年的球员罢工造成的)。

关于r - 避免 R 中的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com