使用R语言zoo包yearmon转换日期时生成NA值的解决方法
解决R语言中月份年份字符串转日期出现NA的问题
问题原因
出现NA结果,通常是因为as.yearmon默认无法正确解析你这种Apr-18格式的日期字符串(英文月份缩写-两位年份),或者你的R环境区域设置(locale)不是英文,导致无法识别英文月份缩写。
解决方案
方法1:使用zoo包并指定格式参数
在as.yearmon中明确指定日期格式,让函数精准解析字符串:
library(zoo) # 将var2转换为日期格式,指定格式为"%b-%y"(英文月份缩写-两位年份) my_df$var2_date <- as.Date(as.yearmon(my_df$var2, format = "%b-%y"))
方法2:用base R原生函数(无需额外包)
给日期字符串补充一个具体日期(比如每月1号),再用as.Date解析:
# 拼接"-01"得到完整日期字符串,按格式解析 my_df$var2_date <- as.Date(paste0(my_df$var2, "-01"), format = "%b-%y-%d")
方法3:临时切换区域设置(针对非英文locale环境)
如果是系统locale为中文导致无法识别英文月份,可以临时切换为英文环境:
# 保存当前locale设置 old_locale <- Sys.getlocale("LC_TIME") # 切换为英文locale Sys.setlocale("LC_TIME", "English") # 执行日期转换 my_df$var2_date <- as.Date(as.yearmon(my_df$var2)) # 恢复原locale设置 Sys.setlocale("LC_TIME", old_locale)
验证结果
执行任意方法后,查看转换后的数据集:
my_df # var1 var2 var2_date # 1 10 Apr-18 2018-04-01 # 2 20 May-18 2018-05-01 # 3 15 Jun-18 2018-06-01
此时就能正常用于绘图:
plot(my_df$var2_date, my_df$var1, type = "l")
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

