如何在R中批量修改多个.csv文件的文件名及内部列值
R代码修正方案
原代码核心问题
1:key$new_ID语法错误:该写法会尝试生成从1到key$new_ID第一个元素的整数序列,完全不符合遍历映射表所有行的需求,应改为遍历映射表的行索引- 未定义
files变量:没有预先读取目标文件夹下的所有csv文件列表,也没有建立文件名称和old_ID的匹配关系,会出现文件找不到或者匹配错位的问题 - 直接将
x$ppt赋值为循环变量i:i是循环的行索引,不是映射表中对应的new_ID,替换逻辑完全错误 - 没有过滤文件:如果文件夹里存在不符合「旧ID+data.csv」命名规则的文件,会直接报错
可直接运行的修正代码
# 1. 读取映射表 key <- read.csv("files_key.csv", stringsAsFactors = FALSE) # 2. 定义任务数据文件夹路径,这里替换成你自己的文件夹实际路径 data_dir <- "./你的任务数据文件夹路径/" # 3. 读取该文件夹下所有后缀为.csv的文件 files <- list.files(data_dir, pattern = "\\.csv$", full.names = TRUE) # 4. 遍历映射表每一行处理 for (row_idx in 1:nrow(key)) { # 取出当前行的旧ID和新ID old_id <- key$old_ID[row_idx] new_id <- key$new_ID[row_idx] # 匹配对应旧ID的文件 target_file <- files[grepl(old_id, basename(files))] # 跳过找不到对应文件的情况,避免报错 if (length(target_file) == 0) next # 读取文件 df <- read.csv(target_file, stringsAsFactors = FALSE) # 替换ppt列中对应旧ID为新ID df$ppt[df$ppt == old_id] <- new_id # 生成新的文件路径 new_file_path <- paste0(data_dir, new_id, "data.csv") # 保存修改后的文件 write.csv(df, new_file_path, row.names = FALSE, na = "") }
额外说明
- 运行前请先把
data_dir的取值替换为你存放任务数据的文件夹实际路径 - 如果确认所有文件都可以匹配到映射表的旧ID,可以删掉
if (length(target_file) == 0) next这行 - 运行前建议先备份原始数据文件,避免误操作丢失数据
内容的提问来源于stack exchange,提问作者abc_95
相关产品推荐
相关产品推荐

