如何用rle函数计算球员连续得分的总分数
解决方案:统计球员连续得分总和
要实现统计每位球员为其球队取得的连续得分总和,你可以通过识别连续得分段并分组求和来完成,以下是基于dplyr的简洁实现:
方法一:用cumsum标记连续得分段
library(dplyr) df %>% # 先按比赛+球队分组,确保仅在同一比赛的同一球队内判断连续得分 group_by(gameid, possession) %>% # 标记当前行是否切换了得分球员,生成连续得分段的ID mutate( # 第一行默认与自身相同,不会触发切换 player_switch = player_fg != lag(player_fg, default = first(player_fg)), # 累加切换次数,得到每个连续段的唯一ID streak_id = cumsum(player_switch) ) %>% # 按连续段分组,计算该段的总得分 group_by(gameid, possession, streak_id, player_fg, .add = TRUE) %>% mutate(streak_total_pts = sum(pts)) %>% ungroup()
方法二:用rle直接生成连续段ID
如果你更习惯用rle函数,也可以直接利用其结果生成分组ID:
library(dplyr) df %>% group_by(gameid, possession) %>% # 用rle的结果重复生成连续段ID mutate(streak_id = rep(seq_along(rle(player_fg)$values), rle(player_fg)$lengths)) %>% # 按连续段计算总得分 group_by(gameid, possession, streak_id, player_fg, .add = TRUE) %>% mutate(streak_total_pts = sum(pts)) %>% ungroup()
结果说明
运行上述代码后,新列streak_total_pts会显示当前行所在连续得分段的总得分:
- D. Rodman的连续2次得分总和为
2+1=3,对应两行的streak_total_pts均为3 - S. Pippen的前3次连续得分总和为
2+2+2=6,最后一次单独得分为2,对应行的streak_total_pts分别为6和2 - P. Ellison的连续2次得分总和为
2+1=3,对应两行的streak_total_pts均为3
内容的提问来源于stack exchange,提问作者Jeff Henderson
相关产品推荐
相关产品推荐

