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

如何基于R语言体育DataFrame计算各球队平均获胜赔率?

解决方法

首先先构造你提供的原始数据框:

df <- data.frame(
  HomeTeam = c("Barcelona", "Madrid", "Liverpool", "Madrid", "Liverpool", "Barcelona"),
  AwayTeam = c("Madrid", "Liverpool", "Barcelona", "Barcelona", "Madrid", "Liverpool"),
  HomeWin = c(2.30, 8.79, 3.41, 1.38, 1.53, 3.35),
  Draw = c(3.28, 5.12, 3.34, 5.08, 4.07, 3.62),
  AwayWin = c(3.27, 1.36, 2.21, 7.92, 6.83, 2.12)
)

方法一:Base R实现

无需额外安装包,用基础R函数即可完成:

# 拆分主客场的球队与对应获胜赔率
home_win <- data.frame(Team = df$HomeTeam, WinOdds = df$HomeWin)
away_win <- data.frame(Team = df$AwayTeam, WinOdds = df$AwayWin)

# 合并所有获胜赔率数据
all_win <- rbind(home_win, away_win)

# 按球队分组计算平均赔率,保留两位小数
result <- aggregate(WinOdds ~ Team, all_win, function(x) round(mean(x), 2))
colnames(result) <- c("Team", "AverageWinOdds")

print(result)

方法二:Tidyverse工具链实现

如果习惯使用dplyr和tidyr,可以用更简洁的管道语法:

library(dplyr)
library(tidyr)

result <- df %>%
  # 将主客场球队转为长格式
  pivot_longer(
    cols = c(HomeTeam, AwayTeam),
    names_to = "type",
    values_to = "Team"
  ) %>%
  # 匹配对应球队的获胜赔率
  mutate(WinOdds = ifelse(type == "HomeTeam", HomeWin, AwayWin)) %>%
  # 分组计算平均赔率
  group_by(Team) %>%
  summarise(AverageWinOdds = round(mean(WinOdds), 2)) %>%
  ungroup()

print(result)

两种方法都会输出你需要的目标数据框:

Team AverageWinOdds
1 Barcelona           3.95
2    Madrid           5.07
3 Liverpool           2.11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:58:20