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
相关产品推荐
相关产品推荐

