如何最有效地将字符串“2014 年 1 月 1 日”转换为 POSIXct,即“2014-01-01”yyyy-mm-dd
How to most efficiently convert a character string of "01 Jan 2014" to POSIXct i.e. "2014-01-01" yyyy-mm-dd
我已经对这里的问题有了部分答案,就我所解释的而言:
但是,任务已经扩展,需要处理原始格式的变化。
我有一个大数据集,有一列字符 class 的日期格式为:
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()
基准
我决定使用 micro benchmark
包和使用 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
我已经对这里的问题有了部分答案,就我所解释的而言:
但是,任务已经扩展,需要处理原始格式的变化。
我有一个大数据集,有一列字符 class 的日期格式为:
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()
基准
我决定使用 micro benchmark
包和使用 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