You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为足球比赛数据创建连续胜负次数及序列结束标识列

足球比赛连续胜负序列计算方案

原始数据

Team <- rep("A", 10)
Match <- 1:10
Outcome <- c("W","W","W","L","L","W","L","W","L","L")

mymatch <- data.frame(Team, Match, Outcome)

需求说明

需为数据集新增4列:

  • win_seq:累计连续获胜次数,球队输球时重置为0
  • loss_seq:累计连续失利次数,球队赢球时重置为0
  • win_end:标记当前记录是否为连胜序列的终点(1表示是,0表示否)
  • loss_end:标记当前记录是否为连败序列的终点(1表示是,0表示否)

期望输出示例:

Team Match Outcome win_seq win_end loss_seq loss_end
1     A     1       W       1       0        0        0
2     A     2       W       2       0        0        0
3     A     3       W       3       1        0        0
4     A     4       L       0       0        1        0
5     A     5       L       0       0        2        1
6     A     6       W       1       1        0        0
7     A     7       L       0       0        1        1
8     A     8       W       1       1        0        0
9     A     9       L       0       0        1        0
10    A    10       L       0       0        2        1

实现代码(R语言)

使用dplyr包处理序列分组与计算,代码如下:

library(dplyr)

mymatch_result <- mymatch %>%
  group_by(Team) %>%
  # 创建胜负标识列
  mutate(
    is_win = ifelse(Outcome == "W", 1, 0),
    is_loss = ifelse(Outcome == "L", 1, 0)
  ) %>%
  # 按连续胜负分组(rleid函数生成连续相同结果的组ID)
  mutate(seq_id = data.table::rleid(Outcome)) %>%
  group_by(Team, seq_id) %>%
  # 计算连续胜负次数
  mutate(
    win_seq = ifelse(is_win == 1, row_number(), 0),
    loss_seq = ifelse(is_loss == 1, row_number(), 0)
  ) %>%
  ungroup() %>%
  # 判断序列是否结束:当前结果与下一行结果不同,或为最后一行
  mutate(
    next_outcome = lead(Outcome, default = ""),
    win_end = ifelse(is_win == 1 & Outcome != next_outcome, 1, 0),
    loss_end = ifelse(is_loss == 1 & Outcome != next_outcome, 1, 0)
  ) %>%
  # 移除中间辅助列
  select(-is_win, -is_loss, -seq_id, -next_outcome)

# 查看结果
print(mymatch_result)

代码说明

  1. 分组与标识:先按球队分组,用is_win/is_loss标记胜负状态;
  2. 连续序列分组:用data.table::rleid生成连续相同结果的组ID,实现连续胜负的分组;
  3. 连续次数计算:在每个连续序列组内,用row_number()累计次数,非对应结果的序列置0;
  4. 序列终点判断:通过lead()获取下一行的结果,若当前结果与下一行不同,或为最后一行,则标记为序列终点;
  5. 清理辅助列:移除中间生成的辅助列,保留目标列。

内容的提问来源于stack exchange,提问作者Seydou GORO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:45:55