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

如何用dplyr批量筛选数据集中分组观测数小于指定值的记录?

用dplyr批量处理变量分组的频数筛选与合并

当然可以用dplyr实现,完全不需要逐个变量手动处理。下面用iris数据集为例,给出两种常见需求的实现代码:

1. 找出所有变量中观测数小于指定阈值的分组

如果只是想定位哪些变量的哪些分组观测数过少(比如阈值设为2),可以用以下代码:

library(dplyr)
library(tidyr)

# 设置阈值
threshold <- 2

iris %>%
  # 转成长格式,统一处理所有变量
  pivot_longer(cols = everything(), names_to = "变量名", values_to = "分组值") %>%
  # 按变量和分组值分组,计算观测数
  group_by(变量名, 分组值) %>%
  summarise(观测数 = n(), .groups = "drop") %>%
  # 筛选出观测数小于阈值的结果
  filter(观测数 < threshold)

这段代码会输出所有变量里,观测数低于设定阈值的分组详情,格式清晰且便于后续处理。

2. 合并变量中观测数过少的分组(匿名化需求)

如果你的核心需求是合并每个变量下观测数少于指定阈值的分组(比如阈值20),用来做数据匿名化,可以这样写:

threshold <- 20

iris %>%
  pivot_longer(cols = everything(), names_to = "变量名", values_to = "分组值") %>%
  group_by(变量名, 分组值) %>%
  summarise(观测数 = n(), .groups = "drop") %>%
  # 按变量分组,把小分组标记为"其他"
  group_by(变量名) %>%
  mutate(分组值 = ifelse(观测数 < threshold, "其他", as.character(分组值))) %>%
  # 重新汇总合并后的分组计数
  group_by(变量名, 分组值) %>%
  summarise(总观测数 = sum(观测数), .groups = "drop")

代码逻辑说明

  • pivot_longer是关键:把宽格式数据集转成长格式,让所有变量都能进入统一的处理流程,避免逐个变量重复写代码。
  • 两次分组汇总:第一次计算原始分组的观测数,第二次合并小分组后重新统计总数,确保结果准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:23:15