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

如何用mutate为tibble新增列,标记各俱乐部的偏好饮品?

问题与解决方案

问题描述

我拥有一个名为football_supporters的dataframe,数据结构如下:

Mun_Code   Code   Municipality   Club       Coca_Cola    Fanta    Sprite
   3        11        NYC       Sharks        152          92       148
   3        12        NYC       Wolfs          93          72        54
   3        13        NYC       Dogs          143          67        38
   3        14        NYC       Cats           32          99       156
#With 200 more rows

我希望通过mutate()函数新增一列Drink,用来统计每个俱乐部偏好的饮品(即该行Coca_Cola、Fanta、Sprite三个数值中最大的对应的饮品名称),同时调整部分列的格式,预期输出如下:

Acode     Code     Clubname    Drink
 11       0111      Sharks     Coca_Cola
 12       0112      Wolfs      Coca_Cola
 13       0113      Dogs       Coca_Cola
 14       0114      Cats       Sprite
#With 200 more rows

我尝试了如下代码,但无法实现需求:

colMax <- function(football_supporters) sapply(football_supporters, max, na.rm = TRUE)

解决方案

你之前的函数是计算每列的最大值,而需求是获取每行最大值对应的饮品名称,用dplyr结合max.col()可以轻松实现:

核心实现(仅新增Drink列)

library(dplyr)

football_supporters <- football_supporters %>%
  mutate(
    Drink = c("Coca_Cola", "Fanta", "Sprite")[
      max.col(select(., Coca_Cola, Fanta, Sprite), ties.method = "first")
    ]
  )

完整匹配预期输出(含列格式调整)

如果需要同时生成Acode、格式化Code、重命名Club为Clubname,可以一起处理:

library(dplyr)

football_supporters <- football_supporters %>%
  mutate(
    Acode = Code,
    Code = sprintf("011%d", Code), # 按示例格式生成带前缀的Code
    Clubname = Club,
    # 匹配每行最大值对应的饮品
    Drink = c("Coca_Cola", "Fanta", "Sprite")[
      max.col(select(., Coca_Cola, Fanta, Sprite), ties.method = "first")
    ]
  ) %>%
  select(Acode, Code, Clubname, Drink) # 筛选出预期输出的列

关键说明

  • select(., Coca_Cola, Fanta, Sprite):精准选中需要比较的三列,避免其他数值列干扰
  • max.col(..., ties.method = "first"):返回每行最大值所在的列索引;若遇多个并列最大值,ties.method参数可指定处理规则(比如"random"随机选一个)
  • 用向量c("Coca_Cola", "Fanta", "Sprite")根据索引映射出对应的饮品名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:09:32