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

如何对DataFrame依次批量应用过滤器并统计行删除情况?

解决方案

1. 数据与过滤器准备

先定义原始数据,同时将过滤器改为更易处理的列表结构(每个元素包含过滤条件和描述),避免原dataframe存储方式的索引问题:

library(dplyr)

# 原始数据
my_data <- data.frame(
  Criterion1 = c(1:9,1:3,3:7,2:4,6:1),
  Criterion2 = c(9:1,3:1,2:3,1:9,5:3)
)

# 过滤器定义:列表存储,每个元素包含过滤表达式和描述
my_filters <- list(
  list(filter_expr = "Criterion1 != 2", desc = "移除所有值为2的行"),
  list(filter_expr = "Criterion2 != 4", desc = "移除所有值为4的行"),
  list(filter_expr = "Criterion1 != 9", desc = "移除所有值为9的行")
)

2. 计算两种场景的行删除统计

我们需要统计两类核心数据:

  • 累计过滤:逐个应用过滤器,记录每次操作删除的行数
  • 单独过滤:每个过滤器直接作用于原始数据,记录单独应用时删除的行数
# 初始化统计结果容器
filter_stats <- data.frame(
  过滤器描述 = character(),
  累计过滤前行数 = integer(),
  累计过滤后行数 = integer(),
  累计删除行数 = integer(),
  单独过滤删除行数 = integer(),
  stringsAsFactors = FALSE
)

# 复制原始数据用于累计过滤流程
current_data <- my_data

# 遍历每个过滤器计算统计值
for (f in my_filters) {
  # 累计过滤统计逻辑
  pre_cum_rows <- nrow(current_data)
  filtered_cum <- filter(current_data, eval(parse(text = f$filter_expr)))
  post_cum_rows <- nrow(filtered_cum)
  removed_cum <- pre_cum_rows - post_cum_rows
  
  # 单独过滤统计逻辑(直接基于原始数据)
  filtered_single <- filter(my_data, eval(parse(text = f$filter_expr)))
  removed_single <- nrow(my_data) - nrow(filtered_single)
  
  # 将当前过滤器的统计结果写入表格
  filter_stats <- rbind(filter_stats, data.frame(
    过滤器描述 = f$desc,
    累计过滤前行数 = pre_cum_rows,
    累计过滤后行数 = post_cum_rows,
    累计删除行数 = removed_cum,
    单独过滤删除行数 = removed_single,
    stringsAsFactors = FALSE
  ))
  
  # 更新累计过滤的当前数据集
  current_data <- filtered_cum
}

3. 生成汇总表格

直接打印统计结果即可得到清晰的汇总表:

print(filter_stats, row.names = FALSE)

运行后输出示例:

过滤器描述 累计过滤前行数 累计过滤后行数 累计删除行数 单独过滤删除行数
移除所有值为2的行            30            24            6                6
移除所有值为4的行            24            23            1                1
移除所有值为9的行            23            22            1                1

如果需要更美观的格式化表格,可使用knitr::kable:

library(knitr)
kable(filter_stats, caption = "过滤器行删除统计汇总")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:20:38