在R语言中如何将Jan DD-YY格式日期转换为YYYY-MM-DD格式?
解决方案
方法1:使用base R原生as.Date()指定格式和区域设置
你的日期格式是英文月份缩写+日+两位年,需要明确指定format参数,同时如果你的系统默认locale不是英文,需要临时切换locale保证英文月份缩写能被识别:
# 临时设置英文locale(Windows系统用下面这行) Sys.setlocale("LC_TIME", "English") # Mac/Linux系统用下面这行 # Sys.setlocale("LC_TIME", "en_US.UTF-8") # 转换日期,%b对应英文月份缩写,%d对应日,%y对应两位年份 df$date_col <- as.Date(df$date_col, format = "%b %d-%y")
默认规则下R会把两位年份中00-69识别为2000-2069,70-99识别为1970-1999,如果你的数据年份范围不符合这个规则,转换后可手动调整年份值。
方法2:使用lubridate包转换(兼容性更强)
lubridate包对日期格式的容错性更高,配置更简单:
# 未安装包先执行安装 # install.packages("lubridate") library(lubridate) # 直接识别日月年格式 df$date_col <- dmy(df$date_col) # 自动识别失败可手动指定格式规则 df$date_col <- parse_date_time(df$date_col, orders = "bdy", locale = "en_US.UTF-8")
常见异常排查
- 检查原始数据是否存在脏值:拼写错误的月份、异常符号、缺失值都会导致返回NA,可筛选出转换失败的值单独处理:
# 提取转换失败的原始值 failed_values <- df$date_col[is.na(as.Date(df$date_col, format = "%b %d-%y"))]
- 确认导入时日期列没有被识别为factor类型,若是factor需先转成字符再做转换:
df$date_col <- as.Date(as.character(df$date_col), format = "%b %d-%y")
内容的提问来源于stack exchange,提问作者Samuel Babins
相关产品推荐
相关产品推荐

