R如何生成球员不同人数阵容组合并统计对应篮球球权数据?
R实现多球员组合球权数据统计方案
首先注意你之前代码中直接用数字作为变量名不符合R语法规范,后续使用请调整命名规则。以下是可直接实现需求的代码方案:
前置准备
先加载依赖包并对原始数据做预处理:
library(tidyverse) # 预处理原始数据,新增每行上场球员集合列 df_pre <- df %>% rowwise() %>% mutate(players = list(c(P1, P2, P3, P4, P5))) %>% ungroup() # 提取所有出现过的唯一球员编号 all_players <- unique(c(df$P1, df$P2, df$P3, df$P4, df$P5))
定义通用统计函数
该函数支持输入任意组合人数,直接返回对应组合的统计结果:
calc_comb_stats <- function(k) { # 生成所有k人不重复组合 all_combs <- combn(all_players, k, simplify = FALSE) # 遍历每个组合计算对应指标总和 map_dfr(all_combs, function(comb) { # 筛选包含当前组合所有球员的行 target_rows <- df_pre %>% filter(map_lgl(players, ~all(comb %in% .x))) # 求和四个核心指标 stats <- target_rows %>% summarise( O.Points = sum(O.Points), O.Poss = sum(O.Poss), D.Points = sum(D.Points), D.Poss = sum(D.Poss) ) # 拼接组合编号列和统计结果 comb_df <- as.data.frame(t(comb)) colnames(comb_df) <- paste0("Num", 1:k) bind_cols(comb_df, stats) }) }
生成所需数据集
直接调用函数即可得到对应人数的组合统计结果:
# 2人组合统计结果 comb2 <- calc_comb_stats(2) # 3人组合统计结果 comb3 <- calc_comb_stats(3) # 4人组合统计结果 comb4 <- calc_comb_stats(4) # 5人组合统计结果 comb5 <- calc_comb_stats(5)
如果需要过滤掉所有指标均为0的无效组合,可以在生成结果后追加以下过滤逻辑:
comb2_clean <- comb2 %>% filter(across(c(O.Points, O.Poss, D.Points, D.Poss), ~.x != 0))
内容的提问来源于stack exchange,提问作者user17311894
相关产品推荐
相关产品推荐

