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

如何用R结合purrr的map函数创建球员同场首发次数的data.frame

用purrr统计篮球队球员同场首发次数

嘿,刚接触网络分析就想到用purrr来处理这个需求,思路很棒!我来一步步带你实现这个球员同场首发次数的统计,完全贴合你的需求~

步骤1:整理比赛数据

首先我们把所有比赛的首发名单整理成一个列表,这样用purrr的map函数处理起来会非常方便:

library(purrr)
library(dplyr)

# 你的输入比赛数据
game_1 <- c("Andy","Bob","Chris","Doug","Evan")
game_2 <- c("Andy","Chris","Evan","Fred","George")

# 把所有比赛打包成一个列表
games_list <- list(game_1, game_2)

步骤2:定义单场比赛的球员对生成函数

我们需要一个函数,输入单场比赛的首发名单,输出这场比赛里所有的无序球员对(毕竟Andy和Bob同场,跟Bob和Andy同场是一回事):

get_player_pairs <- function(game) {
  # 用combn生成所有2人组合,转置后转成data.frame
  combn(game, 2) %>%
    t() %>%
    as.data.frame(stringsAsFactors = FALSE) %>%
    # 对每行的两个球员排序,确保无序对的格式统一
    mutate(across(c(V1, V2), sort)) %>%
    # 重命名列名,匹配你期望的n_1、n_2
    rename(n_1 = V1, n_2 = V2)
}

步骤3:用purrr批量处理所有比赛

这里用map_dfr函数,它会自动把map处理后的多个data.frame合并成一个大的data.frame,省去手动合并的麻烦:

# 遍历所有比赛,生成所有场次的球员对
all_pairs <- map_dfr(games_list, get_player_pairs)

步骤4:统计同场次数并整理结果

最后用dplyr的分组统计功能,计算每个球员对的同场首发次数:

# 分组统计每个球员对的同场次数
final_result <- all_pairs %>%
  group_by(n_1, n_2) %>%
  summarise(games = n(), .groups = "drop")

# 查看最终结果
final_result

运行这段代码后,你会得到这样的结果(以你给的两场比赛为例):

A tibble: 14 × 3

n_1 n_2 games

1 Andy Bob 1
2 Andy Chris 2
3 Andy Doug 1
4 Andy Evan 2
5 Andy Fred 1
6 Andy George 1
7 Bob Chris 1
8 Bob Doug 1
9 Bob Evan 1
10 Chris Doug 1
11 Chris Evan 2
12 Chris Fred 1
13 Chris George 1
14 Evan Fred 1

这样就完美实现了你想要的包含球员对(n_1、n_2)和同场次数(games)的data.frame啦!如果之后有更多比赛数据,只需要把新的game_x加入到games_list里就行,代码完全可以复用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:45:41