使用 fread 读取对齐的列数据
Reading aligned column data with fread
我遇到了这样一个文件:
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,因为列之间没有 space,例如你会看到像 00010 这样的字符串实际上包含 3 个字段。
如果是这种情况,您将需要一个字段宽度字典,此时您有多种选择:
read.fwf
R
以内
- 写一个
fwf
->csv
程序(我用的是我在Python
写的,速度很快,如果你愿意可以分享代码)——基本上您初始方法的增强版本,这样您就不必再处理 FWF
- 在 Excel / LibreOffice / 等中打开它;有一个本机 FWF reader 尝试(通常很差)猜测列的宽度,这至少完成了为您指定列宽的一半工作。然后您可以将其另存为 .csv 或其他格式。
我个人最常坚持第二种选择。 read.fwf
没有像 fread
那样优化,所以它可能会很慢。如果你有很多(比如 20+)FWF 需要阅读,那么第三个选项就相当乏味了。
但我同意在 fread
中内置这样的东西会很好。
最近在当前开发 (v1.9.5) 中修复。请升级并测试(如有任何问题请报告)。
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
fread()
在其他参数中获得了 strip.white
个参数(默认值=TRUE
)。请查看项目页面上的 README
以获取最新消息。
我遇到了这样一个文件:
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,因为列之间没有 space,例如你会看到像 00010 这样的字符串实际上包含 3 个字段。
如果是这种情况,您将需要一个字段宽度字典,此时您有多种选择:
read.fwf
R
以内
- 写一个
fwf
->csv
程序(我用的是我在Python
写的,速度很快,如果你愿意可以分享代码)——基本上您初始方法的增强版本,这样您就不必再处理 FWF - 在 Excel / LibreOffice / 等中打开它;有一个本机 FWF reader 尝试(通常很差)猜测列的宽度,这至少完成了为您指定列宽的一半工作。然后您可以将其另存为 .csv 或其他格式。
我个人最常坚持第二种选择。 read.fwf
没有像 fread
那样优化,所以它可能会很慢。如果你有很多(比如 20+)FWF 需要阅读,那么第三个选项就相当乏味了。
但我同意在 fread
中内置这样的东西会很好。
最近在当前开发 (v1.9.5) 中修复。请升级并测试(如有任何问题请报告)。
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
fread()
在其他参数中获得了 strip.white
个参数(默认值=TRUE
)。请查看项目页面上的 README
以获取最新消息。