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

使用as.Date转换"March 15, 2017"为日期时返回NA的问题求助

解决as.Date转换英文日期返回NA的问题

这个问题我碰到过好多次啦!问题其实不在你的格式字符串%B %d, %Y(它确实是对的),而是R的**区域设置(locale)**在搞鬼~

为什么会返回NA?

当你的系统默认locale是中文(或者其他非英文语言)时,as.Date()会按照当前区域的月份名称规则去解析字符串,自然认不出"March"这种英文月份名称,所以返回了NA。

两种解决办法

方法1:临时修改locale适配英文日期

你可以先临时把时间相关的locale改成英文,转换完成后再恢复原来的设置,避免影响其他操作:

# 保存当前的时间locale设置
old_locale <- Sys.getlocale("LC_TIME")

# 设置为英文(不同系统写法略有差异,不行的话换下面的备选)
Sys.setlocale("LC_TIME", "English")
# Windows备选:Sys.setlocale("LC_TIME", "English_United States.1252")
# Linux/macOS备选:Sys.setlocale("LC_TIME", "en_US.UTF-8")

# 现在转换日期就正常了
as.Date("March 15, 2017", "%B %d, %Y")

# 转换完成后恢复原来的locale
Sys.setlocale("LC_TIME", old_locale)

方法2:用lubridate包简化操作

如果经常处理各种格式的日期,推荐使用lubridate包,它的mdy()函数可以直接识别"月-日-年"这种英文格式,完全不用管locale:

# 首次使用先安装包
install.packages("lubridate")
library(lubridate)

# 直接转换,一步到位
mdy("March 15, 2017")

内容的提问来源于stack exchange,提问作者B.LIANG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:32