маленькая посылка:
Мой набор данных состоит из 1230 наблюдений, которые представляют собой совпадения Nba, каждый из которых я записал по 36 переменных.
date ID MIN Home_team home_score away_score Away_team Home_2PM ..
2017-10-17 1 48 CLE 102 99 BOS 33 ..
10/17/2017 2 48 GSW 121 122 HOU 27 ..
Мне нужно создать рекурсивную функцию для извлечения значений из переменной HomeOFR, обусловленную тем, что переменная home_team имеет определенное значение, которое изменяется. В частности, я заинтересован в создании индекса нарушения под названием OFRteam для каждой команды, но мне нужно агрегировать данные большего количества совпадений, поскольку набор данных состоит из разных совпадений между одними и теми же командами. У меня 41 матч, где команда х играет дома против других. Я уже создал еще один столбец в моем наборе данных с именем homeofr, который содержит значения, которые мне нужны, но я не знаю, как их условно извлечь в значение home_team.
Вот что я написал:
teamname<-sort(unique(dati[,"Home_team"]))
output <- vector("double")
for (i in 1:length(teamname)) { # where teamname is a vector containing
# names of teams ( for example CLE for cleveland cavaliers)
for (j in 1:1230){
if(Home_team[j]==teamname[i]){
output[[i]] <- mean(HomeOFR[[j]]) #output is my OFRteam vector
j=j+1}}
i=i+1 }
output
Я получаю результат, который далек от того, который я рассчитал, сделав среднее значение для столбца HomeOFR, проиндексированного каждым home_team [i].
Я был бы рад, если бы кто-то мог помочь мне сказать, есть ли способ, которым я могу упростить этот код и где моя ошибка?
>dati$Home_team[1:50]
"CLE" "GSW" "DET" "IND" "ORL" "WAS" "BOS" "MEM" "DAL" "UTA" "SAS" "PHX"
"SAC" "TOR" "OKC" "LAL" "CHA" "IND" "PHI" "WAS" "MIL"
"BKN" "MIN" "DAL" "NOP" "PHX" "TOR" "CLE" "MIA" "NYK" "CHI" "HOU" "MEM"
"MIL" "DEN" "UTA" "LAC" "BKN" "OKC" "LAL" "DET" "MIA"
"HOU" "MIL" "DAL" "SAS" "DEN" "PHX" "CLE" "ORL"
> dati$HomeOFR[1:50]
87.93103 99.18033 90.26549 112.90323 94.30894 100.00000 90.09009
95.37037 103.73832 106.00000 95.53571 63.86555
96.15385 101.73913 88.98305 81.41593 95.61404 87.27273 75.40984
97.45763 97.97980 109.56522 95.23810 87.12871
100.84034 89.04110 92.75362 87.73585 93.33333 104.90196 69.36937
94.69027 100.90909 103.66972 95.04950 86.48649
103.17460 98.30508 100.00000 94.11765 76.78571 97.19626 86.53846
78.03030 89.56522 90.17857 95.41284 89.31298
120.20202 101.62602
Работая в одной команде, скажем, ATL и BKN, я собрал все матчи, в которых команда хозяев одинакова:
Home_team HomeOFR
ATL 88.49558
ATL 96.36364
ATL 91.22807
ATL 101.90476
ATL 108.62069
ATL 90.00000
ATL 97.16981
ATL 109.43396
ATL 81.25000
ATL 100.88496
ATL 84.90566
ATL 115.84158
ATL 90.09901
ATL 96.49123
ATL 100.00000
ATL 107.69231
ATL 102.72727
ATL 100.97087
ATL 92.10526
ATL 97.14286
ATL 88.67925
ATL 89.81481
ATL 88.13559
ATL 73.80952
ATL 104.00000
ATL 99.05660
ATL 102.80374
ATL 100.93458
ATL 89.91597
ATL 100.00000
ATL 83.20000
ATL 86.99187
ATL 98.19820
ATL 92.62295
ATL 115.09434
ATL 94.69027
ATL 90.69767
ATL 79.13043
ATL 94.94949
ATL 77.47748
ATL 87.59690
BKN 109.56522
BKN 98.30508
BKN 91.05691
BKN 97.36842
BKN 95.79832
BKN 88.69565
BKN 108.25688
BKN 88.09524
BKN 96.15385
BKN 91.89189
BKN 78.74016
BKN 84.76190
BKN 92.79279
BKN 98.11321
BKN 94.17476
BKN 101.02041
BKN 111.21495
BKN 85.21739
BKN 89.90826
BKN 75.89286
BKN 84.96241
BKN 72.72727
BKN 84.55285
BKN 81.89655
BKN 93.51852
BKN 112.62136
BKN 89.18919
BKN 95.91837
BKN 110.78431
BKN 81.01266
BKN 95.28302
BKN 97.16981
BKN 86.66667
BKN 85.08772
BKN 93.57798
BKN 116.32653
BKN 98.33333
BKN 79.54545
BKN 102.70270
BKN 84.21053
BKN 101.78571
Среднее значение ATL составляет 94,90554, но мой алгоритм дает мне 87,6, среднее значение BKN составляет 93,29017, но я получаю 101,8 и так далее.
Я думаю, что написал плохо, но не могу понять, где ошибка.