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

R语言按累计百分比分组筛选:保留阈值内及超阈值首行

分组筛选累计占比子集实现方案

需求描述

按yyyymm字段分组筛选数据,规则如下:

  • 保留每个分组内累计百分比cumperc小于等于指定阈值(本案例为0.5)的所有行
  • 额外保留每个分组内cumperc首次超过阈值的第一行

原有代码问题

原代码无法得到预期结果,原因有两点:

  • group_by(yyyymm)后未衔接分组操作函数,分组设置不会对后续的全局索引筛选生效
  • 仅判断了cumperc <= 0.5的条件,未补充保留首次超阈值行的逻辑

可复用实现代码

基于dplyr的分组筛选逻辑实现,支持任意阈值调整,自动适配所有分组:

library(dplyr)

# 可根据需求修改阈值
filter_threshold <- 0.5

df_filtered <- df %>%
  group_by(yyyymm) %>%
  filter(
    # 保留所有小于等于阈值的行
    cumperc <= filter_threshold
    |
    # 额外保留分组内第一个超过阈值的行
    row_number() == which(cumperc > filter_threshold)[1]
  ) %>%
  ungroup()

注:如果存在分组所有行的cumperc均不超过阈值的极端情况,上述逻辑也可正常运行,不会报错。

结果验证

使用提供的完整示例数据集运行代码,输出结果与预期完全匹配:

# A tibble: 11 × 4
     ind yyyymm cumperc name  
   <int>  <int>   <dbl> <chr> 
 1     1 202006   0.196 CHILD 
 2     2 202006   0.327 WOMAN 
 3     3 202006   0.401 MAN   
 4     4 202006   0.461 PET   
 5     5 202006   0.504 FRIEND
 6     9 202007   0.157 CHILD 
 7    10 202007   0.265 MAN   
 8    11 202007   0.369 WOMAN 
 9    12 202007   0.459 PET   
10    13 202007   0.494 FRIEND
11    14 202007   0.519 ENEMY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:54:22