You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言使用lubridate解析带TH、ST后缀的英文日期问题

问题核心

你当前的解析逻辑会失败,主要源于两点:

  • 原始日期字符串前后带有冗余空格,未做预处理
  • 日期部分附带的ST/TH/ND/RD这类序数后缀,是%d占位符无法直接识别的——%d仅匹配纯数字格式的日值,遇到附带字母的内容会匹配失败,返回NA值
解决方案

方法一:先清洗字符串再解析(容错性最高,最稳妥)

核心思路是先剔除冗余内容,再套用你原本的解析规则,完整可运行代码如下:

library(lubridate)
# 原始测试数据
dt <- c("  4TH AUGUST 2014 ", "  1ST AUGUST 2014 ")

# 清洗步骤:1. 去除字符串前后的多余空格 2. 删除数字后附带的不区分大小写的序数后缀
dt_clean <- trimws(dt) |> 
  gsub(pattern = "(\\d+)(st|nd|rd|th)", replacement = "\\1", ignore.case = TRUE)

# 执行日期解析
parse_date_time(dt_clean, orders = "%d %B %Y")

方法二:直接在解析规则中兼容序数后缀

如果不想单独写预处理环节,也可以在parse_date_time的格式规则中直接加入对序数后缀的匹配,跳过独立清洗步骤:

parse_date_time(dt, orders = "%d(?i)(st|nd|rd|th) %B %Y")

注:该方法的容错性弱于先清洗再解析的方案,如果字符串中存在格式不规范的杂字,更容易出现解析偏差。


内容的提问来源于stack exchange,提问作者Laurence_jj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 10:54:04