如何用R语言计算体育球队的连胜/连败场次
R语言计算球队连胜/连败场次解决方案
要解决比赛结果切换时重置累加计数的问题,核心思路是先识别连续相同结果的分组,再在每个分组内计算连续场次,而非全局累加。以下提供两种实现方式:
方法一:使用dplyr(tidyverse生态)
library(dplyr) # 初始化数据并命名列 data <- c(1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1) %>% as.data.frame() %>% rename(result = ".") # 将默认列名改为result # 计算连胜/连败场次 data <- data %>% # 生成连续相同结果的分组ID:结果变化时分组ID递增 mutate(group_id = cumsum(c(1, diff(result) != 0))) %>% # 按分组ID分组,计算组内行号(即当前连续场次) group_by(group_id) %>% mutate(streak = row_number()) %>% ungroup() %>% # 标记连胜/连败类型 mutate(streak_type = ifelse(result == 1, "连胜", "连败")) # 查看结果 print(data)
方法二:Base R实现(无需额外包)
# 初始化数据 data <- data.frame(result = c(1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1)) # 生成连续相同结果的分组ID group_id <- c(1, cumsum(diff(data$result) != 0)) # 按分组计算连续场次 data$streak <- ave(rep(1, nrow(data)), group_id, FUN = cumsum) # 标记连胜/连败类型 data$streak_type <- ifelse(data$result == 1, "连胜", "连败") # 查看结果 print(data)
结果说明
两种方法都会生成符合需求的结果:当比赛结果从胜(1)转负(0)或反之,streak列会自动重置为1,依次累加当前连续场次,最终可以清晰看到每场比赛后的球队连续状态。
内容的提问来源于stack exchange,提问作者AENT711
相关产品推荐
相关产品推荐

