R语言如何将日期时间字符串正确转换为YYYYMM格式日期
R中dd/mm/yyyy HH:MM格式字符串转YYYYMM的实现方案
返回NA或格式异常的核心原因是解析阶段使用的格式符和原始字符串结构不匹配,你提供的样例为「两位日期/两位月份/四位年份 两位小时:两位分钟」结构,直接套用默认日期解析规则必然失败,以下是可直接运行的实现方法:
基础R实现(无需安装额外包)
解析时严格对应字符串各段的格式标记,解析为标准日期时间对象后再输出目标格式即可:
# 原始待转换字符串 Date_format_current <- '02/09/2020 23:35' # 按实际结构解析为POSIXct日期时间对象 dt_obj <- as.POSIXct( Date_format_current, # 格式符顺序必须和字符串结构完全对应:%d=两位日 %m=两位月 %Y=四位年 %H=24制小时 %M=分钟 format = "%d/%m/%Y %H:%M" ) # 格式化为YYYYMM格式 result <- format(dt_obj, "%Y%m")
运行后result输出值为"202009",和样例中9月的日期对应。
注意:如果你的数据源实际采用「月/日/年」的美式日期记录规则,只需要把解析阶段的格式符调整为
"%m/%d/%Y %H:%M"即可,此时样例字符串会解析为2020年2月,输出结果为"202002",请根据数据实际的日月顺序调整。
lubridate包实现(格式匹配更简单)
如果可以使用第三方包,lubridate封装了按日期结构命名的解析函数,不用手动写格式符,出错概率更低:
# 加载包,首次使用需先运行install.packages("lubridate")安装 library(lubridate) Date_format_current <- '02/09/2020 23:35' # 日/月/年+时分结构用dmy_hm解析;如果是月/日/年结构替换为mdy_hm即可 dt_obj <- dmy_hm(Date_format_current) result <- format(dt_obj, "%Y%m")
常见踩坑说明
- 不要直接调用
as.Date()/as.POSIXct()不指定format参数,函数默认的解析规则无法匹配斜杠分隔、带时间后缀的字符串,会直接返回NA - 注意区分格式符:
%Y对应四位年份,%y对应两位年份,用错会导致年份解析完全错误 - 原始字符串带时间部分时,解析阶段需要匹配时间段的格式,不能只写日期部分的格式规则,否则可能出现解析偏移。
内容的提问来源于stack exchange,提问作者Nupur Jain
相关产品推荐
相关产品推荐

