玩家排名取决于玩游戏的数量

Player ranking dependent on number of played games

我有一个 df 球员和他们的罚分。它看起来像这样:

# playerID  penalty 
#   A         0
#   B         2
#   A         4
#   C         2
#   A         0
#   B         0
#   B         2 

我想得到一个 "player rank" 这取决于 "penalty" 和玩游戏的数量(A 三场,C 一场)。如果有球员 X 在 10 场比赛中平均罚球 = 3,而球员 Y 在 4 场比赛中平均罚球 = 3,那么球员 X 的 "player rank" 应该低于球员 Y 的 "player rank" .

我的想法是将玩家 i 的平均罚分除以 sqrt(n(i)),其中 n(i) 是玩家 i 玩的游戏次数。第二个想法是将平均惩罚除以 log(n(i)+1).

您认为这是正确的做法吗?有人在处理类似的问题吗?

感谢您的回复。

我想你想把这个 post 转移到 Cross Validated。无论如何,这是通过 data.table.

解决您的问题的方法
library(data.table)
df = data.frame( playerID = c( "A", "B", "A", "C", "A", "B", "B"),  
                 penalty = c( 0, 2, 4, 2, 0, 0, 2 ) )

setDT(df)

df[ , games := .N, by = playerID ]
df[ , mean_penalty := mean( penalty ), by = playerID ]
df[ , `:=` ( rank1 = mean_penalty / sqrt(games),
             rank2 = mean_penalty /  log(games+1) ) ]
final = unique(df, by = "playerID" )

> final
   playerID penalty games mean_penalty     rank1     rank2
1:        A       0     3     1.333333 0.7698004 0.9617967
2:        B       2     3     1.333333 0.7698004 0.9617967
3:        C       2     1     2.000000 2.0000000 2.8853901