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

使用dplyr与mutate按分组添加最小值列报错解决方法

报错原因

slice()是dplyr中按行索引筛选数据的函数,仅接受数据框/tibble类型作为输入。你在mutate()中写slice(which.min(amt))时,传入的which.min(amt)返回值是组内最小值对应的单个行位置数值,属于数值向量,不符合slice()的输入要求,因此触发报错。
另外你的需求是为所有行追加组内统计列,不是筛选行,本身不需要调用slice()。

修正代码

分组后为所有行新增组内统计列,直接在mutate()中调用对应聚合函数即可,最简洁的写法是直接用R内置的min()函数计算组内amt的最小值:

library(dplyr)

result <- data %>% 
  group_by(id) %>% 
  mutate(min = min(amt)) %>%
  ungroup()

运行后得到的result和你给出的预期输出完全一致。

注:末尾加ungroup()是良好的编码习惯,避免后续对数据框做其他操作时,意外保留分组状态导致计算错误。

如果你习惯用which.min()的索引逻辑,也可以用下面的写法,效果完全相同:

result <- data %>% 
  group_by(id) %>% 
  mutate(min = amt[which.min(amt)]) %>%
  ungroup()

这种索引写法通用性更强,除了最小值,要取组内最大值、第一个/最后一个观测值、特定位置的值都可以套用相同逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:48:16