我正在尝试从字符串中获取日期,例如:“ID0123122021”。 其中前两位数字是 ID,然后是月份,然后是年份。 所以它相当于“IDnnnnmmyyyy”,实际日期将是 12-2021。
我想提取最终日期。我试过了:
as.Date("ID0123122021", format = "ID%nnnn%m%Y")
正如预期的那样,它返回 NA,因为 %n 不存在 (https://www.statology.org/r-date-format/)。我也试过了
as.Date("ID0123122021", format = "ID0123%m%Y")
这也不起作用,也不会特别有用,因为 ID 可能会改变。
有什么方法可以定义要忽略的字符的格式吗?类似于
format = %iiiiii%m%Y
,其中 %i
标志意味着在构建日期时忽略此字符?
谢谢!
您可以提取日期元素,插入该月的第一天,然后转换为日期对象。
library(stringr)
library(lubridate)
str_sub("ID0123122021", 7, 12) |> str_c("01") |> myd()
#> [1] "2021-12-01"
创建于 2024-04-23,使用 reprex v2.1.0
向组合中添加正则表达式以首先提取相关部分:
date_str <- "ID0123122021"
# extract last 6 digits if led by IDxxxx
stringr::str_extract(date_str, "(?<=ID\\d{4})\\d{6}$") |> lubridate::my()
#> [1] "2021-12-01"
创建于 2024-04-23,使用 reprex v2.1.0