批量过滤CSV文件后如何合并结果并汇总过滤计数?
批量处理CSV并汇总过滤统计数据
核心思路
在处理每个CSV文件时,同时计算初始行数、过滤后行数及删除行数,将这些统计信息与过滤后的数据分开存储,最后分别合并统计信息为表格、合并数据为单个data.frame。
修改后的完整代码
library(tidyverse) # 定义单个CSV文件的处理函数,返回统计信息和过滤后数据的列表 process_csv <- function(file_path) { # 读取文件(show_col_types=FALSE关闭列类型提示,可选) raw_df <- read_csv(file_path, show_col_types = FALSE) # 计算初始行数 initial_rows <- nrow(raw_df) # 执行过滤操作——替换为你的实际过滤条件 filtered_df <- raw_df %>% filter(your_condition_here) # 计算过滤后行数 filtered_rows <- nrow(filtered_df) # 返回包含统计和数据的列表 list( stats = tibble( filename = basename(file_path), initial_rows = initial_rows, filtered_rows = filtered_rows, rows_removed = initial_rows - filtered_rows ), data = filtered_df ) } # 获取目标目录下所有CSV文件的完整路径 csv_files <- list.files( path = "your_csv_folder_path", # 替换为你的CSV文件所在目录 pattern = "\\.csv$", full.names = TRUE ) # 批量处理所有CSV文件 all_results <- map(csv_files, process_csv) # 提取并合并所有统计信息为一个表格 filter_summary <- map_dfr(all_results, ~ .x$stats) # 提取并合并所有过滤后的数据为单个data.frame combined_filtered_data <- map_dfr(all_results, ~ .x$data) # 查看统计结果 print(filter_summary) # 查看合并后的数据(可选) # print(combined_filtered_data) # 可选:保存统计表格和合并数据到文件 # write_csv(filter_summary, "filter_stats_summary.csv") # write_csv(combined_filtered_data, "combined_filtered_data.csv")
代码说明
- process_csv函数:负责单个文件的读取、过滤和统计,返回的列表中
stats是该文件的统计行(包含文件名、初始行数、过滤后行数、删除行数),data是过滤后的数据集。 - map函数:遍历所有CSV文件,调用
process_csv处理每个文件,返回包含所有文件结果的列表。 - map_dfr函数:分别提取列表中的统计信息和过滤后数据,按行合并成最终的统计表格和合并数据集。
扩展提示
- 若处理超大CSV文件,推荐用
vroom包替代read_csv,读取速度更快且内存占用更低,只需将read_csv替换为vroom::vroom即可。 - 过滤条件可根据实际需求灵活调整,例如
filter(age >= 18, status == "active")。
内容的提问来源于stack exchange,提问作者Dimitri
相关产品推荐
相关产品推荐

