【问题标题】:How to handle data with no space between separators when using fread in R在R中使用fread时如何处理分隔符之间没有空格的数据
【发布时间】:2017-08-31 04:04:07
【问题描述】:

我正在通过fread 将一个大的.txt 文件(>1GB) 读入R。我正在通过 bash 命令直接从 .zip 存档中读取文件:

base = fread('unzip -p Folder.zip File.txt', sep = '|', header = FALSE, 
stringsAsFactors = FALSE, na.strings="", quote = "", col.names = col_namesMain)

文本文件通过| 分隔条目,因此典型的行可能如下所示:

RRX|||02020||333293||||12123

但是,在许多地方,空条目由分隔符表示,它们之间没有空格,例如|| 在上面的示例行中。

当使用fread 时,这些相邻的分隔符通常会被一起读入,因此上面的行会返回以下条目:

RRX, ||02020|, 333293|||, 12123

什么时候应该读作:

RRX, NA, NA, 02020, NA, 333293, NA, NA, NA, 12123

我尝试过使用read.tableskipNul = TRUE 选项,效果很好。但是,对于fread,似乎没有任何类似于skipNul 的选项。如果可能的话,我更喜欢使用fread 而不是read.table,因为我有几个非常大的文件。尽管我进行了搜索,但我并没有遇到太多关于这个问题的讨论。非常感谢任何帮助。

【问题讨论】:

  • 我无法复制此问题。 fread("RRX|||02020||333293||||12123\n", sep="|") 结果给了我RRX NA NA 2020 NA 333293 NA NA NA 12123
  • @Frank 啊,是的,我就是这个意思,谢谢。
  • @thelatemail 我还发现使用命令fread("RRX|||02020||333293||||12123\n", sep="|") 可以正确读取该行。但是,在 unzip bash 命令上使用 fread 时,我仍然遇到问题。也许问题出在我从 zip 存档中读取文本文件的方式上?
  • 您希望|| 被读为两个 NA? , 这里是分隔符吗?
  • 尝试使用压缩文件,对我来说可以正常工作。可能在您的压缩文件中缺少“\n”?尝试从磁盘解压并读取解压后的文件。

标签: r data.table fread read.table


【解决方案1】:

我尝试使用带有选项 skipNul = TRUE 的 read.table,而这 完美运行。但是,似乎没有任何类似的选项 为 fread 跳过 Nul。

此问题已于 2019 年 4 月 15 日在 dev 1.12.3 中修复(请参阅 NEWS):

  1. fread() 现在跳过嵌入的 NUL (\0),#3400。感谢 Marcus Davy 提供的示例报告,以及 Roy Storey 的初始 PR。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多