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

如何使用mutate按分组从其他列的最值创建新列?

解决方案

首先构造示例数据集:

library(dplyr)

df <- tibble(
  A = c(1,5,NA,NA,NA),
  B = c(NA,NA,10,11,13)
)

你可以通过mutate结合which.max、which.min和case_when实现需求,代码如下:

df <- df %>%
  mutate(
    C = case_when(
      # 匹配A列最大值所在行,取对应A值
      row_number() == which.max(A) ~ A,
      # 匹配B列最小值所在行,取对应B值
      row_number() == which.min(B) ~ B,
      # 其余行设为NA
      TRUE ~ NA_real_
    )
  )

说明

  • which.max(A)返回A列中第一个最大值的行号(此处A的最大值为5,对应第2行);which.min(B)返回B列中第一个最小值的行号(此处B的最小值为10,对应第3行)。
  • row_number()标记当前行位置,匹配到目标行时赋值对应列的值,其余行用NA_real_确保数值型列的类型一致性,避免警告。

执行后得到的数据集:

# A tibble: 5 × 3
      A     B     C
  <dbl> <dbl> <dbl>
1     1    NA    NA
2     5    NA     5
3    NA    10    10
4    NA    11    NA
5    NA    13    NA

如果需要处理多组最大值/最小值的情况(比如A列存在多个相同最大值),可调整判断条件:

df <- df %>%
  mutate(
    max_A = max(A, na.rm = TRUE),
    min_B = min(B, na.rm = TRUE),
    C = case_when(
      A == max_A ~ A,
      B == min_B ~ B,
      TRUE ~ NA_real_
    )
  ) %>%
  select(-max_A, -min_B)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:22