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

2012/11/13 21:10:00

让我们称之为csv$Date.and.Time
我想将这些日期(及其伴随数据)尽快转换为xts

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

这是我目前的方法。有人对如何使其更快有任何建议吗?
 dt <- as.POSIXct(csv$Date.and.Time,tz="UTC")

idx <- format(dt,tz=z,usetz=TRUE)

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

这有效100%。只是非常非常慢。我试过并行运行它(它什么也没做;如果有的话,它会使情况变得更糟)。我所说的“慢”是什么意思?
 user    system   elapsed
155.246  16.430 171.650

那是在3GhZ,16GB ram 2012 mb pro上。在Win7机器上具有32GB RAM的类似处理器上,我可以得到的一半左右

我确定有人有更好的主意-我愿意通过Rcpp等接受建议。但是,理想情况下,该解决方案可与csv结合使用,而不是与其他方法(如设置数据库)一起使用。话虽如此,我要通过任何能够实现最快转换的方法来做到这一点。

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

最佳答案

您需要Simon的小而简单的fasttime软件包,该软件包以最快的方式完成此操作-通过不调用时间解析函数,而仅使用C级字符串函数。

它不支持strptime格式。实际上,它甚至没有格式字符串。但是格式正确的ISO格式变体(即yyyy-mm-dd hh:mm:ss.fff)将起作用,并且/分隔符也可能起作用。

关于r - 将200万行日期字符串加速转换为POSIX.ct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13638545/

10-12 17:59
查看更多