如何为篮球赛事数据集按分组条件创建prev_shot列?
解决方案:创建篮球赛事数据的
prev_shot列 核心思路
- 按**赛事(game)和球员(player)**分组,仅在同赛事同球员的范围内追溯上一次投篮记录
- 组内第一行(球员本场首次投篮)的
prev_shot固定赋值为1;其余行取同组内上一行的shot值
dplyr 实现方法
借助dplyr的分组和滞后函数,代码简洁直观:
library(dplyr) dat_ <- dat_ %>% group_by(game, player) %>% mutate(prev_shot = lag(shot, default = 1)) %>% ungroup()
group_by(game, player):限定仅在同赛事同球员的组内处理数据lag(shot, default = 1):lag()函数自动提取当前行的前一行shot值,组内首行无前置数据时,用default=1填充ungroup():取消分组,恢复普通数据框结构
Base R 实现方法
无需额外包,用ave()函数实现分组逻辑:
dat_$prev_shot <- ave(dat_$shot, dat_$game, dat_$player, FUN = function(x) c(1, x[-length(x)]))
ave()按game和player对shot列分组处理- 自定义函数
function(x) c(1, x[-length(x)]):给每个分组的投篮序列开头添加1(对应首次投篮),后续元素取分组内前一个位置的shot值
内容的提问来源于stack exchange,提问作者DR15
相关产品推荐
相关产品推荐

