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
相关产品推荐
相关产品推荐

