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

求助:用R语言实现篮球换人数据的阵容迭代更新

解决篮球比赛换人阵容迭代更新问题

你的核心需求是逐行迭代更新场上阵容:用前一行的lineupAfter填充当前行的lineupBefore空值,再替换指定球员得到当前行的lineupAfter。mutate无法实现是因为它按列批量计算,无法传递行间的状态,这里可以用purrr::accumulate来实现逐行状态传递。

解决方案代码

library(tidyverse)

# 修正原始数据中的笔误(第一行player_in应为player_6,否则和预期输出不符)
df <- tibble(sub_num = c(1,2,3),
             player_out = c('player_5', 'player_4', 'player_3'),
             player_in = c('player_6', 'player_7', 'player_8'),
             lineupBefore = c('player_1, player_2, player_3, player_4, player_5',NA,NA)
             )

# 定义球员替换函数
replace_player <- function(current_lineup, out_in_pair) {
  str_replace(current_lineup, out_in_pair$player_out, out_in_pair$player_in)
}

df_after <- df %>%
  # 将每行的player_out和player_in打包成列表,供accumulate迭代使用
  mutate(out_in_pair = pmap(list(player_out, player_in), ~list(player_out = .x, player_in = .y))) %>%
  # 生成lineupAfter:以第一行的lineupBefore为初始值,逐行执行替换
  mutate(lineupAfter = accumulate(out_in_pair, replace_player, .init = first(lineupBefore))[-1]) %>%
  # 填充lineupBefore的空值:后续行取上一行的lineupAfter
  mutate(lineupBefore = if_else(is.na(lineupBefore), lag(lineupAfter), lineupBefore)) %>%
  # 移除临时辅助列
  select(-out_in_pair)

# 查看结果
df_after

代码解释

  1. accumulate的作用:它会遍历out_in_pair列表,每次将上一次替换后的阵容作为输入,执行当前行的球员替换,完美实现行间状态传递。
  2. .init = first(lineupBefore):指定初始阵容为第一行的lineupBefore,[-1]是去掉初始值对应的多余元素,保证lineupAfter的行数和原数据一致。
  3. 填充lineupBefore空值:用lag(lineupAfter)获取上一行的最终阵容,补全当前行的lineupBefore。

运行结果

输出与你预期的df_after完全一致:

# A tibble: 3 × 5
  sub_num player_out player_in lineupBefore                          lineupAfter                          
    <dbl> <chr>      <chr>     <chr>                                  <chr>                                
1       1 player_5   player_6  player_1, player_2, player_3, player_4, player_5 player_1, player_2, player_3, player_4, player_6
2       2 player_4   player_7  player_1, player_2, player_3, player_4, player_6 player_1, player_2, player_3, player_7, player_6
3       3 player_3   player_8  player_1, player_2, player_3, player_7, player_6 player_1, player_2, player_8, player_7, player_6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:35:05