加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

R data.table fread命令:如何读取带有不规则分隔符的大文件?

发布时间:2020-12-14 01:35:28 所属栏目:Linux 来源:网络整理
导读:我必须处理120个~2 GB(525600行×302列)文件的集合.目标是制作一些统计数据并将结果放在干净的SQLite数据库中. 当我的脚本使用read.table()导入时,一切正常,但速度很慢.所以我尝试使用fread,来自data.table包(版本1.9.2),但它给了我这个错误: Error in frea
我必须处理120个~2 GB(525600行×302列)文件的集合.目标是制作一些统计数据并将结果放在干净的SQLite数据库中.

当我的脚本使用read.table()导入时,一切正常,但速度很慢.所以我尝试使用fread,来自data.table包(版本1.9.2),但它给了我这个错误:

Error in fread(txt,header = T,select = c("YYY","MM","DD",: 
Not positioned correctly after testing format of header row. ch=' '

我的数据的前2行和7行看起来像这样:

YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00

因此,开头有第一个空格,日期列之间只有一个空格,其他列之间有任意数量的空格.

我试过用这样的命令来转换逗号中的空格:

DT <- fread(
            paste("sed 's/s+/,/g'",txt),header=T,select=c('HHHH','MM','DD','HH')
)

没有成功:问题仍然存在,使用sed命令似乎很慢.

Fread似乎不喜欢“任意数量的空间”作为分隔符或开头的空列.任何的想法 ?

这是(可能)最小的可重复示例(40790之后的换行符):

txt<-print(" YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00")

testDT<-fread(txt,select=c("YYY","HH")
)

谢谢你的帮助 !

更新:
– data.table 1.8.*不会发生错误.在这个版本中,表被读作一个唯一的行,这并不是更好.

更新2
– 如评论中所述,我可以使用sed格式化表格,然后用fread读取它.我在上面的答案中放了一个脚本,在那里我创建了一个样本数据集,然后比较一些system.time().

解决方法

sed 's/^[[:blank:]]*//;s/[[:blank:]]{1,}/,/g'

为你sed

不可能将fread的所有结果收集到1(临时)文件中(添加源引用)并使用sed(或其他工具)处理此文件以避免在每次迭代时分叉工具?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读