享受的力量lubridate
:
library(lubridate)
mdy(ord_dates)
[1] "2016-09-01" "2016-09-02" "2016-09-03" "2016-09-04"
在内部,lubridate
没有任何特殊的转换规范可以实现这一点。相当,lubridate
首先使用(通过聪明的猜测)格式"%B %dst, %Y"
。这得到了第一个元素ord_dates
.
然后它检查NA
s 并重复对剩余元素的智能猜测,确定"%B %dnd, %Y"
得到第二个元素。以此类推,直到没有NA
s left(在这种情况下发生在 4 次迭代之后),或者直到它的智能猜测无法找到可能的格式候选。
你可以想象这使得lubridate
速度较慢,而且确实如此——大约是使用上面 @alistaire 建议的智能正则表达式速度的一半:
set.seed(109123)
ord_dates <- sample(
c("September 1st, 2016", "September 2nd, 2016",
"September 3rd, 2016", "September 4th, 2016"),
1e6, TRUE
)
library(microbenchmark)
microbenchmark(times = 10L,
lubridate = mdy(ord_dates),
base = as.Date(sub("\\D+,", "", ord_dates),
format = "%B %e %Y"))
# Unit: seconds
# expr min lq mean median uq max neval cld
# lubridate 2.167957 2.219463 2.290950 2.252565 2.301725 2.587724 10 b
# base 1.183970 1.224824 1.218642 1.227034 1.228324 1.229095 10 a
明显的优势在于lubridate
其优点在于其简洁性和灵活性。