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

使用dplyr按分类变量及第二变量区间频数筛选dataframe的方法

dplyr实现分组计数后筛选TopN分类的解决方案

以下是基于mtcars数据集的完整可运行实现,完全匹配你的需求:

library(dplyr)

# 设置随机种子保证结果可复现
set.seed(123)

# 可自定义修改的参数
drat_min <- 4.0
drat_max <- 4.3
keep_top_n <- 2

# 核心筛选流程
res <- mtcars %>%
  # 统计每个carb分类下符合drat区间的有效样本数
  add_count(carb, wt = drat >= drat_min & drat <= drat_max, name = "valid_count") %>%
  # 提取唯一carb分类及对应有效计数,同计数分类随机排序后取前2个
  distinct(carb, valid_count) %>%
  arrange(desc(valid_count), runif(n())) %>%
  slice_head(n = keep_top_n) %>%
  # 关联回原数据集,仅保留符合区间要求的行
  inner_join(mtcars, by = "carb") %>%
  filter(drat >= drat_min & drat <= drat_max)

逻辑说明

  • 计数阶段:add_count的wt参数传入逻辑判断式,直接统计每个carb分组内满足drat区间的行数,无需单独做分组汇总再关联
  • 并列处理阶段:同有效计数的carb分类通过runif(n())生成的随机值排序,天然实现并列分类的随机选择,配合set.seed可完全复现抽样结果
  • 最终筛选阶段:拿到选中的TopN carb分类后,关联原表再过滤区间内的行,结果完全符合要求

示例运行效果:设置set.seed(123)时,会选中carb=1(对应3行有效数据)和carb=4(对应1行有效数据),最终得到4行结果;更换随机种子时会随机选中carb=2作为第二名分类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:09:04