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

如何在R中将汇总得分列转换为二元响应列?

解决方法

可以通过先转长格式再拆分的方式实现需求,结合tidyr::pivot_longer()和tidyr::uncount()就能解决uncount仅支持单列权重的问题,具体步骤如下:

1. 构造示例数据

先模拟符合你描述的比赛结果数据框(方便测试验证):

library(tidyverse)

game_results <- tibble(
  event.date = as.Date("2024-06-15"),
  home.name = "A",
  away.name = "B",
  home.score = 7,
  away.score = 5 # 总得分12,最终会生成12行逐点记录
)

2. 转换为逐点记录格式

通过三步完成转换:转长格式拆分得分列、按分数值拆分行、生成二元响应列:

point_records <- game_results %>%
  # 将home.score和away.score转为长格式,区分得分归属和分数值
  pivot_longer(
    cols = c(home.score, away.score),
    names_to = "score_owner",
    values_to = "point_count"
  ) %>%
  # 按point_count的值,把每行拆分成对应数量的行
  uncount(point_count) %>%
  # 生成二元响应列:home得分则home.score=1、away.score=0,反之亦然
  mutate(
    home.score = if_else(score_owner == "home.score", 1, 0),
    away.score = if_else(score_owner == "away.score", 1, 0),
    score_owner = NULL # 可选:删除中间辅助列
  )

3. 结果说明

运行后point_records会生成12行数据:其中7行对应A(主队)的得分(home.score=1、away.score=0),5行对应B(客队)的得分(home.score=0、away.score=1),完全匹配你的需求。如果原始数据包含多场比赛,该代码可以直接批量处理,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:47:35