我遇到了一个像这样的文件:
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再次我个人最常坚持第二种选择。
read.fwf
没有像fread
那样进行优化,因此它可能很慢。而且,如果您有很多(比如20+)的FWF可供阅读,那么第3个选项将非常繁琐。但是我同意在
fread
中内置这样的东西会很好。关于使用fread读取对齐的列数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30955464/