如何用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
相关产品推荐
相关产品推荐

