R语言:将字符型日期列转为标准日期格式并提取年月
R日期列转换与年月提取解决方案
给定data.table类型的数据表dt.data,其中begTime为字符型日期列(格式01-MON-YY),以下是针对两个问题的具体解决方法:
1. 将字符型日期转换为01-01-2023格式的标准日期列
标准R日期列(Date类型)内部以数值存储,可通过格式化输出为指定字符串格式,以下是两种实现方式:
方法1:Base R + data.table语法
# 转换为Date类型列 dt.data[, begTime_date := as.Date(begTime, format = "%d-%b-%y")] # 可选:将Date类型列格式化为"dd-mm-yyyy"的字符型列 dt.data[, begTime_formatted := format(begTime_date, "%d-%m-%Y")]
as.Date()的format参数%d-%b-%y匹配输入格式:%d对应两位日期,%b对应英文月份缩写,%y对应两位年份。format()的%d-%m-%Y指定输出格式:%m对应两位月份,%Y对应四位年份。
方法2:使用lubridate包(更简洁)
library(lubridate) dt.data[, begTime_date := dmy(begTime)] dt.data[, begTime_formatted := format(begTime_date, "%d-%m-%Y")]
dmy()自动识别日-月缩写-年格式的字符串,直接转换为Date类型。
2. 提取年月生成JAN2023格式的新列
可从原字符列或转换后的Date列提取年月,以下是两种可靠方式:
方法1:从原字符列提取
dt.data[, year_month := toupper(paste0(substr(begTime, 4, 6), "20", substr(begTime, 8, 9)))]
substr(begTime,4,6)提取月份缩写(如JAN),substr(begTime,8,9)提取两位年份(如23),拼接后用toupper()确保全大写。
方法2:从转换后的Date列生成(更不易出错)
dt.data[, year_month := toupper(format(begTime_date, "%b%Y"))]
format()的%b%Y输出Jan2023格式,toupper()转换为全大写得到JAN2023。
内容的提问来源于stack exchange,提问作者Miko
相关产品推荐
相关产品推荐

