【问题标题】:R data.table fread how to deal with embedded ^@ character?R data.table fread如何处理嵌入的^@字符?
【发布时间】:2019-04-17 10:44:08
【问题描述】:

我无法用 fread 读取这个 csv:

➜  Downloads cat t2.csv 
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618

我认为这是因为在 vim 中我看到了这些字符:

47616412|76-398-12||^@||7639812

并且 fread 在第 4 列放了一个换行符。如何处理?

编辑 1

请注意标准控制台输出不显示这些字符:

➜  Downloads cat t2.csv 
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618

我只在 vim 中看到它们:

47616412|76-398-12||^@||7639812
47616413|53-1696-18||^@||53169618

编辑 2

进一步注意 read.csvskipNul 有效:

> read.csv("t2.csv", sep="|",header=FALSE,skipNul=TRUE)
        V1         V2 V3 V4 V5       V6
1 47616412  76-398-12 NA NA NA  7639812
2 47616413 53-1696-18 NA NA NA 53169618

编辑 3

这是文件! dropbox download

【问题讨论】:

标签: r data.table


【解决方案1】:

这个问题刚刚在 dev 1.12.3 中得到修复(参见 NEWS):

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

我检查了您附加到问题的文件确实在 CRAN 上以 1.12.2 失败,但在开发人员中工作。

> library(data.table)   # v1.12.2 on CRAN 07 Apr 2019
> fread("~/Downloads/t2.csv")
Empty data.table (0 rows and 1 cols): 47616412|76-398-12||
Warning message:
In fread("~/Downloads/t2.csv") :
  Stopped early on line 2. Expected 1 fields but found 1. Consider fill=TRUE
  and comment.char=. First discarded non-empty line: <<>>

但在 dev 1.12.3 中它现在可以工作了:

> library(data.table)   # v1.12.3 in development as of 17 Apr 2019
> fread("~/Downloads/t2.csv")
         V1         V2     V3     V4     V5       V6
      <int>     <char> <lgcl> <lgcl> <lgcl>    <int>
1: 47616412  76-398-12     NA     NA     NA  7639812
2: 47616413 53-1696-18     NA     NA     NA 53169618
>

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2016-10-18
    • 2017-11-26
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多