r - R - 解析字符串中包含的多个日期
问题描述
我正在寻找一种方法来解析字符串中包含的任意格式的多个日期。
my_date="6 May 2018 10$ party 2018-01-05 meeting"
my_parser(my_date)
# expected : c("2018-05-06 GMT","2018-01-05 GMT")
parsedate包能够解析任何日期格式,但前提是字符串仅包含一个日期。
library(parsedate)
parse_date("06 may 2018 10$ party",approx=T)
#"2018-05-06 GMT"
parse_date("06 may 2018 10$ party 2018-01-05 meeting",approx=T)
#"2018-01-05 GMT"
解决方案
您可以将月份名称替换为月份编号,按单词拆分字符串并将 parse_date 应用于每个拆分部分:
library(parsedate)
library(stringr)
my_date="6 May 2018 10$ party 2018-01-05 meeting"
month_list <- c("Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep", "Oct","Nov","Dec")
text <-my_date
for (i in 1:12){
text <-ifelse(grepl(month_list[i], text), gsub(month_list[i], i, text), text)
}
words <- str_split(text, " ")
words[[1]][grepl("[A-Za-z]", words[[1]])] <-";"
text <- paste(words[[1]], collapse = " ")
str<- str_split(text, ";")
dates<- lapply(str,parse_date)[[1]]
dates <- dates[!is.na(dates)]
推荐阅读
- sublimetext3 - macOS Mojave 上 sublime text 3 中的字体渲染错误
- java - 某些文件的“音频/mpeg”流 api 无法播放某些文件?
- amazon-web-services - 使用 AWS API Gateway 访问原始 URL
- scala - Spark Scala:加入 2 个表并提取最大日期的数据(请参阅说明)
- angular - 如何将 2 个字符串插值的 2 个值同步到一个输入 ngModel angular 6
- types - 我们如何在 Elixir 中测试“范围”类型
- typescript - 如何像在 WebStorm 中一样轻松地导航到 VS Code 中的接口实现?
- android-studio - Android Studio 房间数据库 - 在 onRestart() 方法中不返回值
- javascript - 如何在 CKEditor5 中设置选择?
- python - 如何让这个 Python 脚本为使用 API 进行的交易添加限制?