在r中组合具有相同名称的文件并将它们写入R中的不同文件

时间:2015-09-21 12:35:00

标签: r csv

我有两个文件夹具有相同名称的文件夹。例如 - FOLDER1有a.csv,b.csv,c.csv,同样FOLDER2有a.csv,b.csv,c.csv

文件具有不同的行数,但列数和名称相同

我想组合具有相同名称的文件,并将它们写入名为a.csv,b.csv c.csv的文件中。

这只是一个例子,我想为800-1000个文件做这件事。

我试过

filenames <- list.files(c(filePathNew,filePath), pattern="*.csv", full.names=TRUE)     

包含两个文件夹

中的所有文件名
lst1 <- lapply(split(filenames, basename(filenames)),function(x) do.call(rbind, 
lapply(x,function(y) read.csv(y, header = TRUE, stringsAsFactors = FALSE, sep = ""))))

lapply(seq_along(lst1), function(i) write.csv(lst1[[i]], paste(filepath,names(lst1)[i], sep = "/"), row.names = FALSE, 
                        quote = FALSE))

但它显示以下错误

Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match
Called from: stop("numbers of columns of arguments do not match")

1 个答案:

答案 0 :(得分:0)

再次更新

正如您现在已经表明您拥有Windows一样,您可以使用保存为CONCAT.BAT

的内容
CD FOLDER1
MKDIR COMBINED
FOR %%G IN (*.CSV) DO COPY "%%G"+FOLDER2\"%%G" COMBINED\"%%G"

然后做

system("CONCAT.BAT", intern=FALSE)

更新了答案

由于您的文件数量超过了最初建议的3,因此您可以使用名为concat的脚本:

#!/bin/bash
cd FOLDER1
for f in *.csv; do cat "$f" FOLDER2/"$f" > "combined${f}"; done

并使其可执行并使用

运行它
system("chmod +x concat; ./concat", intern=FALSE)

原始答案

如果在Unix / Linux上,请尝试:

system("cat FOLDER1/a.csv FOLDER2/a.csv > aCombined.csv", intern=FALSE)

如果在Windows上,请尝试:

system("copy FOLDER1\a.csv+FOLDER2\a.csv aCombined.csv", intern=FALSE)