gpt4 book ai didi

r - data.table colClasses 转换为 POSIXct

转载 作者:行者123 更新时间:2023-12-01 17:23:54 24 4
gpt4 key购买 nike

为什么 data.table::freadcolClasses 参数似乎没有将 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)] 操作,因为实际数据有大约 5000 万行和许多列。替代语法似乎也不起作用:

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

freaddata.table 帮助显示“类的字符向量(命名或未命名),如 read.csv。或者列向量的命名列表名称或数字,请参阅示例。fread 中的 colClasses 旨在用于罕见的覆盖,而不是日常使用。如果 colClasses 请求,fread 只会将列提升为更高的类型。它不会将列降级为较低的类型,因为 NA 会结果。如果您确实需要丢失数据,则必须事后自己强制这些列。”

我不清楚 POSIXct 是否被视为比 character 更低的类型。

我正在使用 data.table 版本 1.10.0 。

最佳答案

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

关于r - data.table colClasses 转换为 POSIXct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com