微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 如何最有效地将字符串“01 Jan 2014”转换为POSIXct即“2014-01-01”yyyy-mm-dd

我已经对这个问题有了部分答案,据我所知,据我所知: How to most efficiently restructure a character string for fasttime in data.table

但是,任务已经扩展,需要处理原始格式的变化.

我有一个大型数据集,其中包含以下形式的字符类日期列:

01 Jan 2014

要么:

dd MMM yyyy

我想重组以提供给fastPOSIXct,它只接受POSIXct顺序中的字符输入:

yyyy-mm-dd

上面链接的问题指出,一种有效的方法是使用正则表达式,然后将输出提供给fast.time.在这里我需要扩展它以包括一个方法来理解每月缩写,转换为数字,然后重新排列?我该怎么做?我知道有一个month.abb作为内置常量.我应该使用它,还是有更聪明的方法

解决方法

使用lubridate怎么样:

x <- "01 Jan 2014"
x
[1] "01 Jan 2014"
library(lubridate)
dmy(x)
[1] "2014-01-01 UTC"

当然,lubridate函数也接受tz参数.要查看可接受参数的完整列表,请参阅OlsonNames()

基准

我决定用一些经验数据更新这个答案,使用微基准包和使用fasstime的lubridate选项.

library(micro benchmark)
microbenchmark(dmy(x),times = 10000)
Unit: milliseconds
   expr      min      lq     mean   median      uq     max neval
 dmy(x) 1.992639 2.02567 2.142212 2.041514 2.07153 39.1384 10000

options(lubridate.fasttime = T)

microbenchmark(dmy(x),times = 10000)
Unit: milliseconds
   expr      min      lq     mean   median       uq      max neval
 dmy(x) 1.993326 2.02488 2.136748 2.039467 2.065326 163.2008 10000

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐