【问题标题】:Combining files with same name in r and writing them into different files in R将r中具有相同名称的文件组合并将它们写入R中的不同文件
【发布时间】:2015-09-21 12:34:59
【问题描述】:

我有两个文件夹,其中的文件名称相同。例如 - 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")

【问题讨论】:

  • 您自己已经尝试过什么?为什么它不起作用?
  • 请看已编辑的问题
  • 从错误消息中,似乎至少有一个文件对的列数不匹配。尝试添加 print 语句以在 do.call 之前打印出文件对,以查看失败的位置。

标签: r csv


【解决方案1】:

再次更新

正如您现在表明您拥有 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)

【讨论】:

  • 我想为大量文件这样做。还有其他方法吗?
  • 你使用的是什么操作系统?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2022-01-02
  • 2021-06-15
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多