如何从R语言的短格式日期字符串中提取四位完整年份?
解决R语言中提取日期字符串的四位年份问题
你之前用as.Date()转换失败,核心原因是未指定匹配日期字符串的格式参数。你的日期字符串格式为日-月份英文缩写-两位年份,对应的格式符是%d-%b-%y,各部分含义:
%d:两位数字表示的日期%b:英文月份缩写(如Feb、Jan)%y:两位数字表示的年份
方法一:基础R原生实现
- 先将字符串转换为标准日期类型:
v1 <- c("01-Feb-09", "01-Jan-10", "03-Mar-11") date_v1 <- as.Date(v1, format = "%d-%b-%y")
- 提取四位年份,使用
format()函数指定%Y(四位年份格式符):
year_v1 <- format(date_v1, "%Y") # 输出结果:"2009" "2010" "2011"
方法二:用lubridate包简化操作
lubridate包提供了更直观的日期处理函数,无需手动编写格式符:
- 安装并加载包:
install.packages("lubridate") library(lubridate)
- 用
dmy()函数直接按日-月-年顺序转换字符串为日期:
date_v1 <- dmy(v1)
- 用
year()函数提取四位年份:
year_v1 <- year(date_v1) # 输出结果:2009 2010 2011(数值型,如需字符型可转成as.character(year_v1))
补充说明
关于两位年份的世纪映射:R默认规则是00-69对应2000-2069,70-99对应1970-1999。如果需要自定义世纪逻辑,可通过字符串截取后手动拼接世纪前缀,比如:
# 直接截取最后两位年份,拼接"20"前缀 year_v1 <- paste0("20", substr(v1, nchar(v1)-1, nchar(v1)))
内容的提问来源于stack exchange,提问作者Bakang
相关产品推荐
相关产品推荐

