1

我经常需要将(长)字符串转换为 R 中的日期类。我注意到这一步似乎很慢。

例子:

date <- c("5/31/2013 23:30", "5/31/2013 23:35", "5/31/2013 23:40", "5/31/2013 23:45", "5/31/2013 23:50", "5/31/2013 23:55")

Date <- as.POSIXct(date, format="%m/%d/%Y %H:%M")

这不是一个大问题,但我想知道我是否忽略了提高效率的简单途径。有什么加快速度的技巧吗?谢谢。

4

1 回答 1

5

由于我在指出这是重复之前写了这个,所以无论如何我都会将其添加为答案。基本上包fasttime可以帮助你如果你有日期之后 1970-01-01 00:00:00 并且他们是GMT 并且他们是格式的year, month, day, hour, minute, second。如果您可以将日期重写为这种格式,那么fastPOSIXct将很快:

#  data
date <- c( "2013/5/31 23:30" , "2013/5/31 23:35" , "2013/5/31 23:40" , "2013/5/31 23:45" )

require(fasttime)
#  fasttime function
dates.ft <- fastPOSIXct( date , tz = "GMT" )

#  base function
dates <- as.POSIXct( date , format= "%Y/%m/%d %H:%M")    

#  rough comparison
require(microbenchmark)
microbenchmark( fastPOSIXct( date , tz = "GMT" ) , as.POSIXct( date , format= "%Y/%m/%d %H:%M") , times = 100L )
#Unit: microseconds
#                                        expr     min      lq  median       uq     max neval
#               fastPOSIXct(date, tz = "GMT")  19.598  21.699  24.148  25.5485 215.927   100
# as.POSIXct(date, format = "%Y/%m/%d %H:%M") 160.633 163.433 168.332 181.9800 278.220   100

但问题是,将日期转换为fasttime可以接受的格式是否更快,或者只是使用as.POSIXct或购买更快的计算机?!

于 2013-06-18T13:42:50.257 回答