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

R语言:如何通过循环实现多CSV文件的读取、分组统计与合并

批量处理CSV文件并合并分组统计结果的解决方案

你的手动处理流程逻辑是对的,但批量循环的代码存在几个逻辑和语法问题,我来帮你修正并优化:

先梳理你原有代码的问题:

  • 错误地将字符串类型的文件名data_names[i]直接赋值为数据框,属于类型不匹配的逻辑错误
  • 循环内每次都重新创建列表并执行合并,应该先把所有处理好的数据集收集到列表中,最后再统一合并
  • summarize里的统计列名应该用对应文件的名称(去掉.csv后缀),否则合并后列名重复无法区分不同文件的统计结果
  • 存在语法错误:比如read.csv语句末尾多了逗号,列表创建的语法不正确

修正后的代码方案(推荐用purrr的map函数,更简洁高效)

# 加载所需包
library(dplyr)
library(purrr)

# 设置工作目录
setwd("/Users/mdumar/Desktop/NCBI/NCBI/")

# 获取所有CSV文件(确保只处理csv文件,避免其他干扰)
data_names <- list.files(pattern = "\\.csv$")

# 批量处理每个CSV文件:读取->分组统计->重命名统计列
processed_data_list <- map(data_names, function(file) {
  # 读取当前文件
  df <- read.csv(file)
  # 获取去掉.csv后缀的文件名,作为统计列的名称
  file_name <- tools::file_path_sans_ext(file)
  # 分组统计并按统计值降序排序
  df %>%
    group_by(Protein.Name) %>%
    summarize(!!file_name := n(), .groups = "drop") %>%  # 用!!实现动态列名赋值
    arrange(desc(!!file_name))
})

# 合并所有处理后的数据集
Rhodo_merge_NCBI <- processed_data_list %>%
  reduce(left_join, by = "Protein.Name")

# 查看合并结果
View(Rhodo_merge_NCBI)

如果你更习惯用for循环的方式,修正后的代码如下:

library(dplyr)
library(purrr)

setwd("/Users/mdumar/Desktop/NCBI/NCBI/")
data_names <- list.files(pattern = "\\.csv$")

# 初始化空列表,用来存储所有处理后的数据集
Rhodo_data_list_NCBI <- list()

for(i in seq_along(data_names)) {
  # 读取当前CSV文件
  current_df <- read.csv(data_names[i])
  # 获取去掉.csv后缀的文件名
  file_name <- tools::file_path_sans_ext(data_names[i])
  # 执行分组统计并排序
  processed_df <- current_df %>%
    group_by(Protein.Name) %>%
    summarize(!!file_name := n(), .groups = "drop") %>%
    arrange(desc(!!file_name))
  # 将处理好的数据集添加到列表中
  Rhodo_data_list_NCBI[[i]] <- processed_df
}

# 最后统一合并所有数据集
Rhodo_merge_NCBI <- Rhodo_data_list_NCBI %>%
  reduce(left_join, by = "Protein.Name")

View(Rhodo_merge_NCBI)

关键细节说明:

  • 使用tools::file_path_sans_ext(file)提取纯文件名,让合并后的列名清晰对应原始文件
  • !!file_name是tidyeval语法,用来动态设置统计列的名称,避免硬编码
  • .groups = "drop"用于分组统计后取消数据的分组状态,避免后续合并出现异常
  • seq_along(data_names)比1:length(data_names)更安全,当目录下没有CSV文件时不会出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:07:29