【问题标题】:Read in certain numbers as NA in R with `data.table::fread`使用 `data.table::fread` 在 R 中读取某些数字为 NA
【发布时间】:2014-03-11 17:01:49
【问题描述】:

我正在阅读由另一个程序创建的一些文件。该程序使用数字-99.9 填充缺失值的条目。

我正在加速一些代码,从使用data.table 包中的read.table()fread() 来读取这些数据文件。我可以在read.table 中使用na.strings=c(-99.9),但fread 似乎不接受na.strings 的数字参数。对应的字符串 na.strings=c("-99.9") 不起作用,并给我错误:'na.strings' is type '

我可以让fread 将数字-99.9 读为NA吗?

【问题讨论】:

  • 如果您对 sed/awk 感到满意,您可以在命令行上执行此操作并将 -99.9 替换为 NA,然后使用 fread 读取文件
  • 我检查了 fread 是否可以接受 colClasses 争论,从文档中发现它“自动检测所有控件,如 sep、colClasses 和 nrows。bit64::integer64 类型也被检测并直接读取,无需在转换之前需要读取为字符。”所以你最好的选择是做一个 sed 替代,然后在 R 中加载文件。这也可能有助于biostat.jhsph.edu/~rpeng/docs/R-large-tables.html
  • @infominer 我知道colClasses 参数,但我担心我可能没有关于脚本中数据文件中的列类的先验知识。有不同类型的文件,而且对所有这些都进行硬编码列类太多。将考虑使用 sed/awk,或在读入文件后进行后处理并替换 -99.9。
  • 列表中可以让na.strings 按预期工作:#2660。我已经在此处添加了一个链接。希望很快。

标签: r data.table read.table


【解决方案1】:

如果您以 dt 的形式读入,之后将这些值更改为 NA。

dt[dt == -99.9] <- NA

问题解决了吗?

【讨论】:

  • 是的,但这不会有效。像这样使用set():=stackoverflow.com/a/7249454/403310
  • 是的,这就是我昨天所做的。我在列上使用带有set 的for 循环将-99.9 替换为NAs。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多