【发布时间】:2019-11-23 21:04:38
【问题描述】:
我有兴趣根据一组规则过滤掉数据。
我有一个数据集,其中包含一支球队在某个时刻获胜概率为 0.8 的所有比赛的比赛数据。我想做的是找到获胜概率达到 0.8 的那个点,然后删除所有游戏,直到下一个游戏数据开始。该数据集包含许多游戏,因此一旦游戏结束,新游戏的数据就会开始,其中获胜概率会回到 0.5 左右。
以下是相关的列,每一行都是游戏中的一个游戏:
- game_id = 每个游戏的唯一编号
- team = 最终获胜概率为 0.8 的团队
- play_id = 每次播放后增加的数量(但由于某种原因不需要按顺序)
- win_per = num 显示在记录的比赛开始时球队获胜的概率是多少
示例 df
df = data.frame(game_id = c(122,122,122,122,122,144,144,144,144,144),
team = c("a","a","a","a","a", "b","b","b","b","b"),
play_id = c(1,5,22,25,34, 45,47,55,58,66),
win_per = c(.5,.6,.86,.81,.85,.54,.43,.47,.81,.77))
所以在这个小例子中,我记录了两支球队(a 和 b)的 5 场比赛,他们在比赛的某个时刻都获得了至少 0.8 的 win_prob。在这两种示例情况下,我都希望在达到 0.8 标记之后删除所有播放,无论 win_prob 是继续上升还是回落到 0.8 以下。
因此,团队 a 将删除最后两行数据(win_prob == .81 和 .85),而团队 b 将删除最后一行数据(win_prob = .77)
我正在想象运行一个 for 循环来检查任何一行中的团队是否与前一行中的团队相同,如果是,则找到具有最低 play-id 的 win_prob >= .8(因为这将是团队第一次达到 0.8),然后以某种方式删除该匹配之后的其余行,直到团队!= 前一行的团队。
当然,您也可能知道更好的方法。非常感谢您帮助我!
【问题讨论】:
-
我应该注意,play_id 将为每个录制的游戏重新启动,因此它们不会在整个数据集中继续保持更大的数字