使用带有fread的长度超过一个字符的分隔符读取文本文件

时间:2015-11-13 14:22:07

标签: r data.table

有没有办法让data.table fread读取包含"|||"等分隔符的文本文件?

我有一个文本文件(2GB),其行显示为

aaa|||bbb|||random characters !$^!$£"!$ contain single |. |||other cols

如果无法使用fread,还有其他推荐吗?我最终会将他们带入data.table

1 个答案:

答案 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在哪里,这是最好的,否则它可以计算(大概是在一些非平凡的时间成本)。

我无法为我的数据集完成freadtstrsplit,但您可能会有更好的运气。