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

R语言技术需求:将单列橄榄球队胜负数据拆分为胜负两列

解决方案:拆分橄榄球队胜负数据为两列

嘿,我来帮你搞定这个数据拆分的问题!你的数据集里每个赛季的每支球队都有两行记录,分别对应胜场和负场的数值,我们可以用几种不同的R语言方法把它们合并成一行,拆分成Wins和Losses两列,下面是具体实现:

方法1:用tidyr的pivot_wider(推荐,直观清晰)

这个方法先给每组数据标记胜负类型,再转换为宽格式,非常适合处理这类长转宽的问题:

# 加载tidyverse包(包含tidyr和dplyr)
library(tidyverse)

# 你的示例数据
Football <- data.frame ( 
  Season = rep ("2009", 10), 
  Team = rep (c("ARI", "ARI", "ATL", "ATL", "BAL", "BAL", "BUF", "BUF", "CAR", "CAR")), 
  Value = c(10, 6, 7, 9, 7, 9, 6, 10, 8, 8) 
)

# 给每个球队的两行数据标记"Wins"和"Losses"
Football <- Football %>%
  group_by(Season, Team) %>%
  mutate(Result = c("Wins", "Losses")) %>%
  ungroup()

# 转换为宽格式,得到目标结构
Football_wide <- Football %>%
  pivot_wider(names_from = Result, values_from = Value)

# 查看结果
print(Football_wide)

运行后你会得到这样的输出:

# A tibble: 5 × 4
  Season Team  Wins Losses
  <chr>  <chr> <dbl>  <dbl>
1 2009   ARI      10      6
2 2009   ATL       7      9
3 2009   BAL       7      9
4 2009   BUF       6     10
5 2009   CAR       8      8

方法2:用dplyr的summarize(更简洁)

如果你确定每个球队的第一行是胜场、第二行是负场,可以直接提取每组的首尾值:

library(dplyr)

Football_wide <- Football %>%
  group_by(Season, Team) %>%
  summarize(
    Wins = first(Value),
    Losses = last(Value),
    .groups = "drop"  # 取消分组
  )

print(Football_wide)

这个方法不需要额外标记列,代码更短,结果和上面完全一致。

方法3:Base R实现(无需额外包)

如果不想加载第三方包,用Base R也能完成:

# 按赛季和球队分组拆分Value列
value_groups <- split(Football$Value, list(Football$Season, Football$Team))

# 构造目标数据框
Football_wide <- data.frame(
  Season = sapply(strsplit(names(value_groups), "\\."), `[`, 1),
  Team = sapply(strsplit(names(value_groups), "\\."), `[`, 2),
  Wins = sapply(value_groups, `[`, 1),
  Losses = sapply(value_groups, `[`, 2)
)

print(Football_wide)

这里用split()分组,再从分组名称中提取赛季和球队信息,最后提取每组的两个值作为胜场和负场。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:56