【发布时间】:2016-10-07 23:51:51
【问题描述】:
我正在尝试在 R 中执行此操作,但 windows 命令行也可以工作。
假设有 10 个大文件,每个文件的第一行都有一个标题。我想要一个包含所有这些文件但没有标题的文件。
我能找到的最快方法是尝试“复制/b”命令将所有这些文件连接成一个更大的文件,然后使用 SED 软件执行命令行查找该大文件中的标题模式并将它们删除.
SED 很慢,我不想在任何需要这种方法的机器上安装 SED。有没有办法使用 copy \b 命令从第二行向前粘贴到那个更大的文件中?
我还完成了通过“fread”从 data.table 包中将文件读入内存的技术,然后使用带有附加功能的 write.table 来制作更大的文件。 (但是 write.table 超级超级慢,并且 data.table 的“fwrite”命令还没有出现在 CRAN 上……它仍在 github 上开发,所以它可能不像我想要的那样稳定是)。
有人有建议吗?
谢谢
【问题讨论】:
-
这将有助于在 R 中提供可重现的代码。具体来说,您是否希望将标题保留为最终结果的第一行?您的问题更多是关于数据争吵还是关于大文件的读/写性能?
-
如果所有文件都具有相同的标题,您可以使用
MyList <- lapply()将所有大文件读入R 中的列表,然后使用MyData <- Reduce(function(...) rbind, MyList)将它们全部放入一个数据帧中。或者通过将lapply()放在MyData <-行中一步完成。 (这假设您在lapply()步骤中将它们作为数据框读入,标题行作为列名。) -
问题只是写入速度。为了将文件读入内存,我处于可能的最大速度,这受到 write.table 速度慢的阻碍。
-
所有文件都有相同的标题。但 ulfeldor 所说的是如何阅读所有这些内容。这不是问题(无论我是一个一个地读取它们,还是一次读取它们,或者将它们绑定在一起),它们写回一个大文件是瓶颈。所以知道我不是在操作数据并且只想将它们连接在一起,我认为有一种方法可以在不将它们读入内存并使用更多与磁盘相关的复制方法的情况下执行此过程......
-
你能在 linux 中做到这一点吗?一定要用DOS吗?
标签: r cmd header concatenation