使用fread读取对齐的列数据

使用fread读取对齐的列数据,r,data.table,R,Data.table,我遇到了这样一个文件: COL1 COL2 COL3 weqw asrg qerhqetjw weweg ethweth rqerhwrtjw rhqerhqerhq qergqer qerhqew5h qerh qergqer wetjwryerj 我不能用fread直接加载它,所以我用替换了\s+,替换为sed,然后我给了fread,它解决了这个问题。但是,是否有一

我遇到了这样一个文件:

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

我不能用
fread
直接加载它,所以我用
替换了
\s+
替换为
sed
,然后我给了fread,它解决了这个问题。但是,是否有一种内置的方法可以使用
数据读取此类数据。table

fread
还没有任何读取功能

一、 也经常会遇到像这样令人烦恼地存储的文件。请随时在上添加功能请求

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

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

  • R
  • 编写一个
    fwf
    ->
    csv
    程序(我使用一个我用
    Python
    编写的程序,速度非常快,如果你愿意,可以共享代码)——基本上是你最初方法的增强版,这样你就不必再处理fwf了
  • 在Excel/LibreOffice/etc中打开;有一个本地的FWF阅读器,它尝试(通常很糟糕)猜测列的宽度,这至少完成了为您指定列宽的一半工作。然后您可以将其保存为.csv或其他格式
  • 我个人最常坚持第二种选择
    read.fwf
    没有像
    fread
    那样进行优化,因此可能会很慢。如果你有很多(比如20+)的FWF需要阅读,那么第三个选项就相当乏味了

    但是我同意,如果最近在当前的devel(v1.9.5)中有这样的东西内置到
    fread

    中,那就太好了。请升级和测试(如果有任何问题,请报告)


    fread()
    在其他参数中获得
    strip.white
    参数(默认值=
    TRUE
    )。请查看项目页面上的
    README
    ,了解最新消息。

    关于
    df(稍微臃肿的版本)的情况如何,代码可以在这里找到;这没什么特别新奇的,我不认为…@statquant,
    read\u fwf
    从“readr”软件包中读取的速度会比base R的
    read.fwf
    快得多(尽管不能触摸到
    fread
    的速度)。@AnandaMahto感谢大家的提醒!工具带版本升级B-)
    require(data.table) # v1.9.5+
    fread("~/Downloads/tmp.txt")
    #           COL1    COL2       COL3
    # 1:        weqw    asrg  qerhqetjw
    # 2:       weweg ethweth rqerhwrtjw
    # 3: rhqerhqerhq qergqer  qerhqew5h
    # 4:        qerh qergqer wetjwryerj