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

时间:2020-03-31 20:28:00

标签: r ranking weighted-average

我有一个df球员及其罚分。看起来像这样:

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

我想获得一个“玩家排名”,该排名取决于“罚分”和所打游戏的数量(A为三局,C为一局)。如果存在10个游戏中平均罚分= 3的玩家X和4个游戏中平均罚分= 3的玩家Y,则玩家X的“玩家等级”应低于玩家Y的“玩家等级”。 / p>

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

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

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

我认为您想将此帖子转移到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