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

如何筛选包含全局最小值的完整分组?R语言dplyr操作疑问

问题分析与解决办法

咱们先搞清楚你原来的代码为啥返回空数据框哈~

原代码的问题所在

你写的filter(all(x==min(x)))这个条件,意思是要求当前分组里的每一个x值都等于该分组自己的最小值。但看你的数据:

  • 分组1的最小值是233,另外两个值是250、240,显然不是所有值都等于233;
  • 分组2的最小值是10,另外两个值是250、100,同样不满足;
  • 分组3的最小值是1,另外两个值是250、100,也不符合“所有x等于分组最小值”的要求。

所以这个条件在任何分组里都不成立,自然就返回空数据框啦。

正确的实现思路

你的需求是:找到包含整个数据框中x的全局最小值的分组,然后保留该分组的所有行。那我们需要调整逻辑:

  1. 先算出x的全局最小值;
  2. 分组后,判断当前分组里是否存在等于这个全局最小值的元素,只要存在,就保留整个分组的所有行。

正确代码示例

library(dplyr)

# 你的原始数据
df <- data.frame(
  x=c(250,240,233,250,100,10,250,100,1),
  gr=gl(3,3)
)

# 方法一:直接在filter里计算全局最小值
df %>%
  group_by(gr) %>%
  filter(any(x == min(df$x))) %>%
  ungroup() # 可选,取消分组状态,方便后续操作

# 方法二:提前计算全局最小值,逻辑更清晰
global_min <- min(df$x)
df %>%
  group_by(gr) %>%
  filter(any(x == global_min)) %>%
  ungroup()

运行后就能得到你预期的输出:

# A tibble: 3 × 2
      x gr   
  <dbl> <fct>
1   250 3    
2   100 3    
3     1 3    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:30