【问题标题】:R data.table fread - read column as DateR data.table fread - 将列读取为日期
【发布时间】:2015-03-19 09:00:06
【问题描述】:

我想从data.table 中读取带有fread 的文件,该文件有一列带有“YYYY-MM-DD”格式日期的列。默认情况下,fread 将该列读取为chr。但是,我希望将列设置为 Date,与应用 as.Date 时获得的方式相同。

我试过用

dt[,starttime.date := as.Date(starttime.date)]

但运行需要很长时间(我有大约 4300 万行)。

【问题讨论】:

  • 看看?fread,描述下的第二段。
  • @Arun as.IDate 会比 as.Date 快吗?
  • 谢谢。 as.IDate 并不快,与as.Date 耗时相同。
  • 我发现在 as.Date 中添加格式字符串通常会有所帮助,例如 as.Date(d, format='%Y-%m-%d')。您可以尝试的另一件事是,因为您有大量的行并且可能是一组较小的唯一日期,所以按日期列分组并按组进行转换。

标签: r data.table


【解决方案1】:

按照fread documentation 中的建议,使用fasttime 包比as.Dateas.IDate 快​​大约100 倍:

library(data.table)
library(fasttime)

dt[,starttime.date := fastPOSIXct(starttime.date)]

基准测试结果:

library(microbenchmark)
library(fasttime)
DT <- data.table(start_date = paste(sample(1900:2018, 100000, replace = T), 
                                    sample(1:12, 100000, replace = T),
                                    sample(1:28, 100000, replace = T),
                                    sep = "-"))
microbenchmark(
  as.Date(DT$start_date),
  as.IDate(DT$start_date),
  fastPOSIXct(DT$start_date)
)

> Unit: milliseconds
>                        expr    mean 
>      as.Date(DT$start_date)  383.89
>     as.IDate(DT$start_date)  405.89
>  fastPOSIXct(DT$start_date)    4.59 

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    相关资源
    最近更新 更多