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

R语言中as.yearmon转换日期返回NA值的原因咨询

问题原因及解决办法

核心原因

出现NA的根本问题是你的R会话当前的区域设置(locale)不是英文。zoo包的as.yearmon函数中,%b格式符依赖系统的LC_TIME locale来识别月份缩写——如果你的locale是中文(比如zh_CN.UTF-8),它只会匹配中文的月份缩写(如“九月”“八月”),无法识别英文的Sep/Aug/Jul,因此返回NA。

你提到的帖子能正常运行,是因为发帖者的R环境使用的是英文locale,%b可以直接识别英文月份缩写。

解决办法

方法1:临时切换到英文locale

可以临时修改R会话的时间区域设置,处理完后再恢复原设置:

# 保存当前时间区域设置
old_locale <- Sys.getlocale("LC_TIME")
# 切换为英文时间区域
Sys.setlocale("LC_TIME", "en_US.UTF-8")

# 重新运行你的代码
library(zoo)
dates <- c("Sep/2012", "Aug/2012", "Jul/2012")
dates1 <- as.yearmon(dates, format="%b/%Y")
dates1

# (可选)恢复原时间区域设置
Sys.setlocale("LC_TIME", old_locale)

方法2:使用兼容性更好的日期处理包

lubridate包的日期解析函数对locale的兼容性更强,无需切换locale也能识别英文月份缩写:

library(lubridate)
dates <- c("Sep/2012", "Aug/2012", "Jul/2012")
dates1 <- my(dates, format = "%b/%Y")
dates1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:45:44