【问题标题】:fread: use of na.string and colClasses parametersfread:使用 na.string 和 colClasses 参数
【发布时间】:2021-06-15 17:22:01
【问题描述】:

我不确定我是否理解 fread 关于空字符串的行为。比如

rawdata <- 'a,b\n"",""\nabc,2020-12-31 00:00:00'
fread(rawdata,na.strings=c("","NA"))
##      a                   b
## 1:                        
## 2: abc 2020-12-31 00:00:00

我期待的是 NA,在第一行。我的假设有缺陷吗?

在同一行中,是否可以同时完全控制colClassesna.strings

假设我想将 a 列和 b 列作为字符读取。

rawdata <- 'a,b\n"",""\n1,2020-12-31 00:00:00'
fread(rawdata,na.strings=c("","NA"),
      colClasses=c(a="character",
                   b="character"))

我正在使用 data.table_1.13.6

更新

部分答案已经回答here fread 似乎使用了与 read.csv 不同的解析器,这可能会导致意外行为。

一种解决方案是用 NA 替换所有空字符串。 见here。但我不确定这个过程是否比read_csv更快

【问题讨论】:

  • rawdata &lt;- 'a,b\n,\n1,2020-12-31 00:00:00' 然后为空将变为NA
  • 感谢您的建议。我无法直接控制rawdata,只有在fread之后才能控制
  • @Henrik 非常感谢您指出这一点。你提到的那篇文章已经逃过了我的视线。

标签: r data.table na fread


【解决方案1】:

所以一旦 fread 解析器不碍事,那么很明显colClassesna.strings 可以同时使用。

请注意,尝试将空引号作为na.strings 并不能完成这项工作。

rawdata <- 'a,b\n"",""\n1,2020-12-31 00:00:00'
fread(rawdata,na.strings=c('\"\"',"","NA"),
      colClasses=c(a="character",
                   b="character"))
```


```
rawdata <- 'a,b\n,2020-12-31 00:00:00\n1,'
fread(rawdata,na.strings=c("","NA"),
      colClasses=c(a="numeric",
                   b="character"))
```

    ##     a                   b
    ## 1: NA 2020-12-31 00:00:00
    ## 2:  1                <NA>

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2020-01-06
    • 2013-07-08
    • 2014-11-01
    • 2014-02-08
    • 2015-04-20
    • 2013-08-19
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多