@hoxo_m さんのこんな話がある。
R で文字列を POSIX time に変換するには lubridate::parse_date_time2() がちょっぱや
じゃあreadrパッケージのparse_datetimeだとどうなるだろうと速度比較したのが以下の結果。
Unit: microseconds
expr min lq mean median uq max neval
strptime(dates, format) 856.961 875.0410 906.98984 881.281 954.7210 1019.521 100
as.POSIXlt(dates) 2641.281 2665.2810 2782.40425 2801.281 2904.3205 2968.642 100
as.POSIXct(dates) 3456.321 3499.6805 3628.93529 3608.001 3747.3610 3886.081 100
lubridate::fast_strptime(dates, format) 37.121 40.9605 45.22340 45.121 46.7210 120.321 100
lubridate::parse_date_time(dates, format, locale = "C") 2086.401 2122.0815 2246.79782 2189.281 2295.2010 5060.161 100
lubridate::parse_date_time2(dates, format) 63.681 69.1210 73.78026 71.361 73.1210 174.402 100
readr::parse_datetime(dates, format) 219.521 227.0410 248.55141 232.961 245.6005 723.841 100
組み込みよりマシだがlubridateパッケージのfast_strptimeやparse_date_time2ほど速くはない。
コード
コードは以下の通り。
dates <- as.POSIXlt("2014-12-01", tz="Japan") + sample(seq(31*24*60*60)-1, size=100, replace=TRUE)
dates <- as.character(dates)
library(microbenchmark)
format <- "%Y-%m-%d %H:%M:%S"
microbenchmark(
strptime(dates, format),
as.POSIXlt(dates),
as.POSIXct(dates),
lubridate::fast_strptime(dates, format),
lubridate::parse_date_time(dates, format, locale="C"),
lubridate::parse_date_time2(dates, format),
readr::parse_datetime(dates, format) # new!!!
)