gpt4 book ai didi

R 统计,将排名表更改为配对

转载 作者:行者123 更新时间:2023-12-04 11:23:23 30 4
gpt4 key购买 nike

我有很多表的数据,例如:

event_id   player   finish
1 a 1
1 b 2
1 c 3
1 d 4
2 b 1
2 e 2
2 f 3
2 a 3
2 g 5

许多 event_id,每个 5 到 20 名玩家,完成可能并列。

为了在 R 中使用 PlayerRatings 包,我想将表格重新格式化为:

event_id   player1   player2 result
1 a b 1
1 a c 1
1 a d 1
1 b c 1
1 b d 1
1 c d 1
2 b e 1
2 b f 1
2 b a 1
2 b g 1
2 e f 1
2 e a 1
2 e g 1
2 f a 0.5
2 f g 1
2 a g 1

4 个玩家的 event_id 将有 4*3/2 = 6 条记录在新表中,5 名玩家将有 5*4/2 = 10 条记录等等。如果玩家“a”的“完成”少于玩家“b”的“结果”为 1。如果“完成”等于“结果”为 0.5。如果选手“a”的成绩比选手“b”高,那么“结果”将为 0。

感谢任何帮助!

最佳答案

这里是一个data.table 解决方案。我将它用于分组和语法功能。代码有点复杂所以我在这里给出思路。

  1. 按 event_id 分组
  2. 对于每个事件,创建玩家的组合,起诉 combn
  3. 对于玩家计算机的每个组合,使用嵌套的 ifelse
  4. 完成得分

这里是完整的代码:

library(data.table)
DT <- as.data.table(dat)
DT[,{ids <- do.call(rbind,combn(seq_along(player),2,simplify=FALSE))
z <- mapply(function(x,y){
z <- ifelse(finish[x]>finish[y],0,
ifelse(finish[x]<finish[y],1,0.5))
data.frame(player[x],player[y],z)
},
ids[,1],
ids[,2])
data.frame(t(z))

},event_id]

event_id player.x. player.y. z
1: 1 a b 1
2: 1 a c 1
3: 1 a d 1
4: 1 b c 1
5: 1 b d 1
6: 1 c d 1
7: 2 b e 1
8: 2 b f 1
9: 2 b a 1
10: 2 b g 1
11: 2 e f 1
12: 2 e a 1
13: 2 e g 1
14: 2 f a 0.5
15: 2 f g 1
16: 2 a g 1

关于R 统计,将排名表更改为配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357104/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com