R语言lubridate及as.Date解析月份缩写日期出现NA异常问题
问题原因排查及解决方案
1. as.Date/as_date转换全返回NA的核心原因
该问题由系统时间区域设置(locale)不匹配导致:
%b是R中对应月份缩写的格式化占位符,默认匹配当前系统locale下的月份缩写,若系统默认语言不是英文,%b无法识别 "Apr" 这类英文月份缩写,就会统一返回NA。
解决代码如下:
# 先修改时间区域为英文(二选一即可) # Windows系统用: Sys.setlocale("LC_TIME", "English") # Mac/Linux系统用: # Sys.setlocale("LC_TIME", "en_US.UTF-8") cc <- c("Apr 02 2021", "Apr 09 2021", "Apr 16 2021", "Apr 23 2021", "Apr 30 2021") # 再执行转换即可正常输出结果 as.Date(cc, format = "%b %d %Y") lubridate::as_date(cc, format = "%b %d %Y")
2. lubridate::mdy额外生成NA的问题
- 核心诱因1:
mdy本身是专门识别「月-日-年」顺序日期的解析函数,不需要额外指定format参数,多余传入的格式参数会干扰解析逻辑 - 核心诱因2:字符串可能存在隐藏空白、不可见字符,可先做清洗再解析
解决代码如下:
# 先清洗字符串空白,直接用mdy解析即可,无需传入format lubridate::mdy(trimws(cc))
如果不想修改全局locale,也可以直接在解析函数内指定区域参数:
lubridate::parse_date_time(cc, orders = "mdy", locale = "English")
内容的提问来源于stack exchange,提问作者Bert
相关产品推荐
相关产品推荐

