用fread读取对齐的列数据

时间:2015-06-20 15:07:33

标签: r data.table

我遇到了这样一个文件:

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

我无法使用fread直接加载它,因此我将\s+替换为, sed而不是我给予fread并解决了它。但有没有一种用data.table读取此类数据的内置方式?

2 个答案:

答案 0 :(得分:3)

fread(还)没有阅读fixed-width files的任何功能。

我也常常遇到像这样烦人存储的文件。您可以在Github page上添加功能请求。

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

如果是这种情况,您需要一个字段宽度字典,此时您有几个选项:

    R
  1. read.fwf
  2. 写一个fwf - > csv程序(我使用我在Python中编写的程序并且速度非常快,如果你这样做可以共享代码喜欢) - 基本上是你最初方法的强化版本,这样你就再也不用再与FWF打交道了
  3. 在Excel / LibreOffice / etc中打开它;有一个原生的FWF阅读器尝试(通常很差)猜测列的宽度,这至少为你指定列宽的一半工作。然后你可以将它保存为.csv或其他任何东西。
  4. 我个人经常坚持第二种选择。 read.fwf未像fread那样进行优化,因此可能会很慢。如果你有很多(比如20多个)的FWF阅读,第三个选项是相当繁琐的。

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

答案 1 :(得分:1)

最近在当前开发中修复了(v1.9.5)。请升级并测试(并报告是否有任何问题)。

fread()

strip.white在其他参数中获得TRUE参数(默认= README)。请在项目页面上查看{{1}}以获取最新的新闻。