用fread读取对齐的列数据

sta*_*ant 6 r data.table

我遇到了这样一个文件:

COL1        COL2          COL3
weqw        asrg          qerhqetjw
weweg       ethweth       rqerhwrtjw
rhqerhqerhq qergqer       qerhqew5h
qerh        qergqer       wetjwryerj
Run Code Online (Sandbox Code Playgroud)

我不能直接加载它fread,所以我代替\s+通过,与sed比我给了FREAD并解决它.但有没有一种内置的方式来阅读这种数据data.table?

Mic*_*ico 3

fread(尚)不具有读取固定宽度文件的任何功能。

我也经常遇到这样令人烦恼地存储的文件。请随意在Github 页面上添加功能请求。

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

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

  1. read.fwf之内R
  2. 编写一个fwf->csv程序(我使用我编写的一个程序Python,它非常快,如果您愿意,可以共享代码)——基本上是您最初方法的增强版本,这样您就不必再次处理 FWF
  3. 在 Excel / LibreOffice / 等中打开它;有一个原生的 FWF 阅读器会尝试(通常很差)猜测列的宽度,它至少完成了为您指定列宽度的一半工作。然后您可以将其另存为 .csv 或其他格式。

我个人最常坚持第二种选择。read.fwf没有像这样优化,fread所以它可能会很慢。如果你有很多(比如 20+)FWF 需要阅读,第三个选项就相当乏味了。

但我同意将这样的东西内置到fread.