将200万行日期字符串加速转换为POSIX.ct

n.e*_*e.w 12 posix r time-series posixct xts

我有一个csv,其中包含大约200万行日期字符串格式:

2012/11/13 21:10:00 
Run Code Online (Sandbox Code Playgroud)

让我们称呼它 csv$Date.and.Time

我想尽快将这些日期(及其附带的数据)转换为xts

我编写了一个脚本,可以很好地执行转换(见下文),但它非常慢,我想尽可能加快速度.

这是我目前的方法.有没有人对如何加快速度提出任何建议?

 dt <- as.POSIXct(csv$Date.and.Time,tz="UTC")

idx <- format(dt,tz=z,usetz=TRUE)
Run Code Online (Sandbox Code Playgroud)

因此脚本将这些日期字符串转换为POSIX.ct.然后使用format(z是表示我要转换的TZ的变量)进行时区转换.然后我做一个常规xts调用,使其成为xts系列,其中包含csv中的其余数据.

这100%工作.它非常非常慢.我试过并行运行它(它没有做任何事情;如果有什么事情让它变得更糟)."慢"是什么意思?

 user    system   elapsed 
155.246  16.430 171.650 
Run Code Online (Sandbox Code Playgroud)

这是一款3GhZ,16GB RAM 2012 mb pro.我可以在Win7机器上使用32GB RAM的类似处理器上获得大约一半

我确信有人有更好的想法 - 我愿意接受建议Rcpp等等.但是,理想情况下,解决方案适用于csv而不是其他一些方法,比如设置数据库.话虽如此,我愿意通过任何方法来实现这一目标,以实现最快的转换.

我非常感谢任何帮助.提前致谢.

Dir*_*tel 19

你想要Simon提供的小而简单的快速包,它以最快的方式完成这个任务 - 通过不调用时间解析函数而只是使用C级字符串函数.

它不支持尽可能多的格式strptime.实际上,它甚至没有格式字符串.但格式良好的ISO格式变体,即可行,yyyy-mm-dd hh:mm:ss.fff您的/分隔符也可以正常工作.

  • system.time(dts < - fastPOSIXct(csv $ Date.and.Time,"UTC"))用户系统已用时0.065 0.000 0.065 (3认同)