You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fread读取全NA列指定为POSIXct类型遇警告并转为字符列问题

问题与解决方法

问题详情

我尝试用data.table的fread()读取一列全为NA的POSIXct类型数据,代码如下:

library(data.table)
fwrite(data.table(datetime = as.POSIXct(NA)), "test.csv")
fread("test.csv", colClasses = "POSIXct")

但运行后触发警告,列被保留为字符型而非POSIXct:

Warning message:
Column 'datetime' was requested to be 'POSIXct' but fread encountered the following error:
character string is not in a standard unambiguous format
so the column has been left as type 'character'

而使用base包的write.csv()+read.csv()组合可以正常实现需求:

write.csv(data.frame(datetime = as.POSIXct(NA)), "test.csv", row.names = FALSE)
read.csv("test.csv", colClasses = "POSIXct")

当前使用data.table版本为1.15.4,已就此问题提交官方Issue。

可行解决方法

方法1:读取后手动转换

先让fread()按默认方式读取列,之后手动将其转为POSIXct类型。由于列中全为NA,转换不会遇到格式问题:

dt <- fread("test.csv")
dt[, datetime := as.POSIXct(datetime)]

方法2:通过colClasses指定转换逻辑

利用fread()的colClasses参数,直接传入转换规则。用列表形式指定目标列的转换类型:

fread("test.csv", colClasses = list(POSIXct = "datetime"))

该方式会直接将指定列转为POSIXct类型,无需后续手动处理。


内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:22:41