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

R中获取列最大值与列名并按条件匹配其他列的实现方法

简洁实现方案

核心思路是先统一计算每行最终要提取的后缀(1或2),所有后续取值、列名生成都复用这个后缀变量,无需重复写判断逻辑,代码如下:

首先加载依赖包:

library(dplyr)

示例数据保持你原有写法不变,处理逻辑:

dat <- dat %>%
  # 统一计算每行需要使用的后缀
  mutate(suf = case_when(
    A_1 > A_2 ~ 1,
    A_2 > A_1 ~ 2,
    # A列相等时走B列的比较逻辑
    TRUE ~ max.col(cbind(B_1, B_2), "first")
  )) %>%
  # 生成A列的最大值和对应列名
  mutate(
    max_A_val = pmax(A_1, A_2),
    max_A_name = paste0("A_", suf)
  ) %>%
  # 批量生成其他前缀的列名和取值,有更多前缀直接在c()里加即可
  mutate(across(c(B),
                list(
                  name = ~paste0(cur_column(), "_", suf),
                  val = ~get(paste0(cur_column(), "_", suf))
                ),
                .names = "{.col}_{.fn}")) %>%
  # 不需要保留后缀字段可以删除
  select(-suf)

代码优势

  • 逻辑集中:所有比较规则都在suf字段的计算逻辑里,后续要扩展规则(比如A、B都相等时再比较C列),只需要修改case_when里的判断条件即可
  • 可扩展性强:如果有C、D、E等更多前缀的列需要提取,只需要在across的第一个参数c(B)里新增对应前缀,不需要重复编写ifelse逻辑
  • 结果和你原有代码输出完全一致,满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:04