R语言如何对不同目录下同文件名csv按frame列内连接批量导出
问题原因
你遇到的报错主要来自两处错误配置:
directories变量填写的是具体csv文件路径,而非dir1、dir2两个目录的根路径,导致list.files将文件识别为目录读取,返回空列表,触发零长度输入报错- 直接对两个目录的文件列表排序后映射,没有校验文件名是否一致,dir2文件多于dir1的场景下会出现长度不匹配、文件错配的问题
完整解决代码
# 加载依赖包 library(dplyr) # 1. 路径配置,替换为你自己的实际路径 dir1_path <- "path/to/your/dir1" dir2_path <- "path/to/your/dir2" output_path <- "path/to/your/output_directory" # 自动创建输出目录,已存在则不报错 dir.create(output_path, showWarnings = FALSE, recursive = TRUE) # 2. 提取两个目录下的同名csv文件 # 只取文件名,不取完整路径 dir1_files <- list.files(dir1_path, pattern = "\\.csv$", full.names = FALSE) dir2_files <- list.files(dir2_path, pattern = "\\.csv$", full.names = FALSE) # 取两个目录的文件交集,只处理两边都存在的文件 common_files <- intersect(dir1_files, dir2_files) # 3. 批量合并输出 lapply(common_files, function(fname) { # 读取两个目录下的同文件名文件 df_dir1 <- read.csv(file.path(dir1_path, fname)) df_dir2 <- read.csv(file.path(dir2_path, fname)) # 按frame列执行inner join joined_df <- inner_join(df_dir1, df_dir2, by = "frame") # 输出到新目录,保留原文件名 write.csv(joined_df, file.path(output_path, fname), row.names = FALSE, na = "") return(NULL) })
注意事项
- 路径配置仅需写到目录层级即可,不要带具体文件名,Windows系统路径可以用
/或者双反斜杠\\ - 如果csv存在特殊分隔符、编码异常,可以给
read.csv增加sep、fileEncoding参数适配 - 文件量过大内存不足时,可以把
lapply替换为普通for循环,每次处理完手动清理内存即可
内容的提问来源于stack exchange,提问作者cebola
相关产品推荐
相关产品推荐

