如何合并来自多个文件夹的.txt文件

时间:2019-05-29 23:14:48

标签: r

我想从多个文件夹中合并R中的多个.txt文件。但是,当我想将数据分为不同的列时,我遇到了麻烦。现在,这些文件合并在一起,但是应该有四列时合并为一列。

我使用list.files在工作目录的文件夹中找到.txt个文件。然后,我使用rbindlapply将它们与read.delim结合在一起。 (见下文)

files = list.files(pattern = "*.txt")

myfiles = do.call(rbind, lapply(files, function(x) read.delim(x, header = FALSE, stringsAsFactors = FALSE)))

上面的代码合并了所有.txt文件,但是每个文件的前3行都是数据下载的工件(基本上只是命名功能),与数据本身无关。因此,一旦文件合并,三行就会重复。我无法使用filter(),因为我必须手动浏览数据(成千上万行)。我还想在另一个具有类似设置的文件夹中重复此过程。因此,我希望能够使用相同的代码。

我认为我可以通过在合并每个.txt文件之前删除它们的前3行来解决此问题。然后,我可以设置header = FALSE并在文件合并后仅添加标题。但是同样,有数百个文件,因此我不希望手动执行此操作。不过,我不确定如何执行此操作。有什么建议么?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

从评论中抄录的选项:

  • read.delim(..., skip = 3)将自己删除这些前导重复行。这也会删除标题行,因此您所有的框架都将具有通用的列名,这不是什么大问题。
  • 要解决此问题,您可以使用read.delim(..., nrows=1)重新读取其中一个文件的第一行(第一?)以获取列名。如果我们使用nrows=0,它将读取所有内容,因此我们至少需要1来限制读取的行;在注释中,我加入了[0,],但是由于您只需要列名,所以它并不会真正影响到事情。

您可以使用以下类似的方法第一次使用它:

files = list.files(pattern = "*.txt")
myfiles = do.call(rbind, lapply(files, function(x) read.delim(x, skip = 3, header = FALSE, stringsAsFactors = FALSE)))
#                                                added this part ^^^^^^^^^
colnames(myfiles) <- colnames(read.delim(files[1], header=TRUE, nrows=1))