我正在处理R中可能发生联系的比赛结果。假设有两名玩家并列第三。他们将分享(3rd_prize + 4th_prize),每个人赚取(3rd_prize + 4th_prize)/ 2。如果有10位玩家并列第三名,他们会将第3位和第13位的和分,并且每人的总和超过10。
给出这种结构,并给出一个数据表,该表列出了所有玩家,他们的绝对成绩以及与之比赛的人数,我们如何生成关于每个人的奖金的专栏?我不知道如何在帖子中设置示例数据的格式,所以我将链接链接到包含示例数据和所需结果的google工作表!
https://docs.google.com/spreadsheets/d/1fLUZ172Sl_yXVQE3VI0Xo4wSr_SRvaL43MCZIMYen2w/edit?usp=sharing
答案 0 :(得分:2)
这里有2个选项:
prizes[results[, rn:=.I], on=.(Position=rn)][,
.(Person, Winnings=sum(Prize) / .N), .(Position=i.Position)]
说明:
results[, rn:=.I]
为结果创建行索引序列prizes[results[, rn:=.I], on=.(Position=rn)]
左联接此结果和奖金表[,.(Person, Winnings=sum(Prize) / .N), .(Position=i.Position)]
。假设是results
已按排名排序。
假设results
中的每一行在prizes
中的同一行中都有奖品,则可以在使用索引提取后计算出平均奖品:
results[, Winnings := sum(prizes$Prize[.I], na.rm=TRUE) / .N, Position]
输出:
Position Person Winnings
1: 1 A 100.0
2: 2 B 50.0
3: 3 C 17.5
4: 3 D 17.5
5: 4 E 5.0
6: 5 F 4.0
7: 6 G 3.0
8: 7 H 1.0
9: 7 I 1.0
10: 7 J 1.0
数据:
library(data.table)
results <- data.table(Person=LETTERS[1:10],
Position=c(1,2,3,3,4,5,6,7,7,7),
tied=c(1,1,2,2,1,1,1,3,3,3))
prizes <- data.table(Position=1:10,
Prize=c(100,50,25,10,5,4,3,2,1,0))