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

如何用dplyr的mutate创建仅保留最小值首次出现的新列?

解决方案:在dplyr::mutate中仅保留最小值的首次出现

基础单表场景

直接利用which.min()定位首个最小值的行索引,结合row_number()判断匹配,就能在mutate里直接生成目标列:

library(dplyr)

# 假设数据框为df,目标列是value,新列命名为min_first_occurrence
df <- df %>%
  mutate(
    min_first_occurrence = ifelse(row_number() == which.min(value), value, NA_real_)
  )

如果偏好case_when写法,逻辑完全一致:

df <- df %>%
  mutate(
    min_first_occurrence = case_when(
      row_number() == which.min(value) ~ value,
      .default = NA_real_
    )
  )

分组场景(按组保留每组首个最小值)

如果需要按分组处理,只需在group_by后执行相同逻辑,组内会自动识别首个最小值的位置:

df <- df %>%
  group_by(group_column) %>% # 替换为你的分组列名
  mutate(
    min_first_occurrence = ifelse(row_number() == which.min(value), value, NA_real_)
  ) %>%
  ungroup()

逻辑说明

  • which.min(value)会返回value列中第一个出现最小值的行索引,天然实现了类似slice_min(..., with_ties=FALSE)的去重效果
  • 用row_number()匹配该索引,只有对应行保留原数值,其余行填充NA
  • 全程无需额外的left_join操作,完全在mutate步骤内完成,简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:03