2013-08-21 60 views
6

對於一個向量或時間列表,我希望從字符串時間開始,例如, 12:34:56.789從午夜到毫秒,這將等於45296789從字符串時間快速轉換爲毫秒

這就是我現在做的事:

toms = function(time) { 
    sapply(strsplit(time, ':', fixed = T), 
     function(x) sum(as.numeric(x)*c(3600000,60000,1000))) 
} 

,想做得更快。

下面是一個示例數據爲基準設置:

times = rep('12:34:56.789', 1e6) 

system.time(toms(times)) 
# user system elapsed 
# 9.00 0.04 9.05 

回答

5

你可以使用fasttime包,這似乎是約一個數量級快。

library(fasttime) 
fasttoms <- function(time) { 
    1000*unclass(fastPOSIXct(paste("1970-01-01",time))) 
} 
times <- rep('12:34:56.789', 1e6) 
system.time(toms(times)) 
# user system elapsed 
# 6.61 0.03 6.68 
system.time(fasttoms(times)) 
# user system elapsed 
# 0.53 0.00 0.53 
identical(fasttoms(times),toms(times)) 
# [1] TRUE