gpt4 book ai didi

R data.table fread 命令 : how to read large files with irregular separators?

转载 作者:行者123 更新时间:2023-12-04 21:57:48 41 4
gpt4 key购买 nike

我必须处理大约 2 GB(525600 行 x 302 列)的 120 个文件的集合。目标是进行一些统计并将结果放入干净的 SQLite 数据库中。

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

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,
header=T,
select=c("YYY","MM","DD","HH")
)

谢谢你的帮助 !

更新 :
- data.table 1.8.* 不会发生错误。在此版本中,表被视为一个唯一的行,这并不好。

更新 2
- 正如评论中提到的,我可以使用 sed 来格式化表格,然后使用 fread 读取它。我在上面的答案中放置了一个脚本,我在其中创建了一个示例数据集,然后比较了一些 system.time()。

最佳答案

Just committed开发,v1.9.5。 fread() yield strip.white默认参数 TRUE (相对于 base::read.table() ,因为它更可取)。示例数据现在已添加到测试中。

通过最近的提交:

require(data.table) # v1.9.5, commit 0e7a835 or more recent
ans <- fread(" YYYY MM DD HH mm 19490 40790\n 1991 10 1 1 0 1.046465E+00 1.568405E+00")
# V1 V2 V3 V4 V5 V6 V7
# 1: YYYY MM DD HH mm 19490.000000 40790.000000
# 2: 1991 10 1 1 0 1.046465 1.568405
sapply(ans, class)
# V1 V2 V3 V4 V5 V6 V7
# "character" "character" "character" "character" "character" "numeric" "numeric"

关于R data.table fread 命令 : how to read large files with irregular separators?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229109/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com