我遇到了一个像这样的文件:

COL1        COL2          COL3
weqw        asrg          qerhqetjw
weweg       ethweth       rqerhwrtjw
rhqerhqerhq qergqer       qerhqew5h
qerh        qergqer       wetjwryerj

我无法直接用fread加载它,所以我用\s+,替换为sed,而不是我为fread提供的功能,它就解决了。但是,是否有内置的方法可以使用data.table读取此类数据?

最佳答案

fread(尚未)没有任何读取fixed-width files的功能。

我也经常遇到这样烦人的文件。随时在Github page上添加功能请求。

在您的情况下可能不是这样,但是您使用sed的解决方案不适用于我遇到的许多FWF,因为列之间没有空格,例如您会看到类似00010的字符串,实际上包含3个字段。

在这种情况下,您将需要一个字段宽度字典,这时您有几个选择:
read.fwf内的

  • R
  • 编写一个fwf-> csv程序(我使用我在Python中编写的程序,它的速度非常快,如果您愿意的话,可以共享代码)-基本来说,这是您最初使用的方法的增强版本,因此您永远不必处理与FWF再次
  • 在Excel/LibreOffice/etc中打开它;有一个 native FWF阅读器尝试(通常很差)猜测列的宽度,这至少为您指定列宽做了一半的工作。然后,您可以将其另存为.csv或任何其他格式。

  • 我个人最常坚持第二种选择。 read.fwf没有像fread那样进行优化,因此它可能很慢。而且,如果您有很多(比如20+)的FWF可供阅读,那么第3个选项将非常繁琐。

    但是我同意在fread中内置这样的东西会很好。

    关于使用fread读取对齐的列数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30955464/

    10-12 03:40