Как извлечь значение переменной, индексированное из набора данных в R, с помощью рекурсивной функции - PullRequest
0 голосов
/ 24 января 2019

маленькая посылка: Мой набор данных состоит из 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 и так далее. Я думаю, что написал плохо, но не могу понять, где ошибка.

...