我原以为正则表达式中启用 perl 实现的命名捕捉功能能获取名称和对应的值,我不知道是我不会用还是没这功能?
dapengde 你的非Non-Tidyverse 版真强,冒着打脸的风险,我把正则表达式的版本放出来,这个版本的唯一优势是面对不那么齐整的日期格式,可以加规则调整,实际数据往往比较脏,不过在我这个数据集中还好。除了出现这样的情况外 2019-6-3 21:44:44
目前还没看到更糟糕的情况,而且这种情况 strptime
仍然处理的好,再给刷个 🚀
extract_date <- function(x) {
m <- regexec("((?<year>(\\d{4}))-(?<month>(\\d{1,2}))-(?<day>(\\d{1,2})))", x, perl = TRUE)
parts <- do.call(rbind,
lapply(regmatches(x, m), `[`, c(2L, 4L, 6L, 8L)))
colnames(parts) <- c("date", "year", "month", "day")
parts
}
equake <- cbind(eq, extract_date(eq[, 1]))
head(equake)
发震时刻 震级(M) 纬度(°) 经度(°) 深度(千米) 参考位置
1 2019-06-30 21:44:44 3.0 27.56 112.10 6 湖南娄底市双峰县
2 2019-06-30 21:32:29 3.1 28.44 104.81 8 四川宜宾市长宁县
3 2019-06-30 12:14:25 3.0 28.43 104.77 9 四川宜宾市珙县
4 2019-06-30 03:44:11 4.8 22.43 122.31 30 台湾台东县海域
5 2019-06-30 03:09:29 3.1 31.00 98.96 7 四川甘孜州白玉县
6 2019-06-30 03:07:58 3.1 31.02 98.96 8 四川甘孜州白玉县
date year month day
1 2019-06-30 2019 06 30
2 2019-06-30 2019 06 30
3 2019-06-30 2019 06 30
4 2019-06-30 2019 06 30
5 2019-06-30 2019 06 30
6 2019-06-30 2019 06 30