如何将字符型日期(如19-Feb-03)转换为日期格式?
解决字符型日期转换问题
当你使用as.Date()失败时,核心原因是未指定匹配你日期格式的format参数——as.Date()默认格式为%Y-%m-%d(如2003-02-19),和你的19-Feb-03(日-月份缩写-两位年份)结构不匹配。
方法1:用as.Date()指定格式
针对你的日期格式,需要传入对应格式码:
%d:两位数字的日期(如19)%b:英文缩写的月份名称(如Feb,若系统默认语言为中文,需先执行Sys.setlocale("LC_TIME", "English")确保识别)%y:两位数字的年份(如03)
示例代码:
# 测试单个日期 as.Date("19-Feb-03", format = "%d-%b-%y") # 输出:"2003-02-19" # 处理数据框中的Date列 df$Date <- as.Date(df$Date, format = "%d-%b-%y")
方法2:用lubridate包简化操作
如果不想手动写格式码,lubridate包的dmy()函数可自动识别日-月-年结构的日期:
library(lubridate) # 测试单个日期 dmy("19-Feb-03") # 输出:"2003-02-19" # 处理数据框列 df$Date <- dmy(df$Date)
注意:两位年份的解析规则
as.Date()和lubridate对两位年份的默认处理逻辑:
- 00-69 对应 2000-2069
- 70-99 对应 1970-1999
若需自定义年份范围,可使用lubridate的parse_date_time():
parse_date_time("19-Feb-03", orders = "dby", cutoff_2000 = 30) # cutoff_2000=30表示:00-29对应2000-2029,30-99对应1930-1999
内容的提问来源于stack exchange,提问作者Penaldo Rafiq
相关产品推荐
相关产品推荐

