玩家排名取决于玩游戏的数量
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
我有一个 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