data.table colClasses 转换为 POSIXct

问题描述 投票:0回答:1

为什么

colClasses
data.table::fread
参数似乎没有将
REQUEST_DATE
列转换为下面示例中的
POSIXct
?它可以毫无问题地转换
ROW_ID
列。

library(data.table)

txt <- "ROW_ID,REQUEST_TYPE,REQUEST_DATE
1,OTHER,2009-07-31 07:35:38
2,OTHER,2009-07-30 21:18:35
3,OTHER,2009-07-30 21:18:30
4,OTHER,2009-07-30 21:18:40
5,OTHER,2009-07-30 21:18:39
6,QUERY,2009-07-30 21:19:29
7,OTHER,2009-07-30 21:18:42
8,OTHER,2009-07-30 21:18:45
9,OTHER,2009-07-31 07:35:31
10,OTHER,2009-07-31 07:35:30
"
dt <- fread(txt, colClasses = c(ROW_ID = "character", REQUEST_DATE = "POSIXct"))

典型的转换也有效:

dt[, as.POSIXct(REQUEST_DATE)]
 [1] "2009-07-31 07:35:38 EDT" "2009-07-30 21:18:35 EDT" "2009-07-30 21:18:30 EDT" "2009-07-30 21:18:40 EDT" "2009-07-30 21:18:39 EDT"
 [6] "2009-07-30 21:19:29 EDT" "2009-07-30 21:18:42 EDT" "2009-07-30 21:18:45 EDT" "2009-07-31 07:35:31 EDT" "2009-07-31 07:35:30 EDT"

在这种特殊情况下,我无法做到

dt[, REQUEST_DATE := as.POSIXct(REQUEST_DATE)]
,因为真实数据有大约 50m 行和许多列。替代语法似乎也不起作用:

dt <- fread(txt, colClasses = list(POSIXct = "REQUEST_DATE"))

data.table
fread
的帮助说“类的字符向量(命名或未命名),如read.csv。或者列名或数字的向量的命名列表,请参阅示例。fread中的colClasses适用于罕见的情况覆盖,不适合日常使用。 fread 只会在 colClasses 请求时将列升级为较低类型,因为如果您真的这样做,您必须自己强制执行此类列。要求数据丢失。”

我不清楚

POSIXct
是否被认为是比
character
更低的类型。

我正在使用

data.table
版本1.10.0.

r datetime data.table fread posixct
1个回答
5
投票

正如 Frank 在评论中提到的,这看起来是当前的

data.table
限制。我最终使用了
fastPOSIXct
包中的
fasttime
函数。它在我的笔记本电脑上大约十几秒内转换了 50m 行,这对于我的用例来说是相当合理的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.