有没有办法让data.table fread
读取包含"|||"
等分隔符的文本文件?
我有一个文本文件(2GB),其行显示为
aaa|||bbb|||random characters !$^!$£"!$ contain single |. |||other cols
如果无法使用fread
,还有其他推荐吗?我最终会将他们带入data.table
。
答案 0 :(得分:1)
包read_delim
中的命令readr
支持包含多个字符的分隔符。
我运行了一些基准测试(1.6 mil行,30列,350 mb txt文件)。
我发现它比使用strsplit
的解决方案快了约40%:
do.call(rbind,strsplit(readLines('test.txt'),'~~~',fixed=T))
如果您为Windows安装gawk
并在Windows中设置适当的系统路径,您还可以执行以下操作:
fread("sed 's/|||/,/g' yourfile", sep = ',')
正如eddi在评论中所建议的那样。这比read_delim
解决方案慢约20%,因为它必须从调用sed
写一个临时文件,但比基本R解决方案更快。
最快的解决方案是使用sep = '|'
的fread并自行删除重复的列。如果你知道apriori在哪里,这是最好的,否则它可以计算(大概是在一些非平凡的时间成本)。
我无法为我的数据集完成fread
和tstrsplit
,但您可能会有更好的运气。