R语言提取EURO MTH/MM/YYYY格式日期并转换为MMYYYY格式
R环境下EURO MTH/MM/YYYY格式转MMYYYY实现方法
测试数据加载
首先复现测试数据集,直接运行以下代码即可载入数据:
df <- structure(list(Monat = c("EURO MTH/07/2015", "EURO MTH/08/2015", "EURO MTH/09/2015", "EURO MTH/10/2015", "EURO MTH/11/2015", "EURO MTH/12/2015"), Gesamtpreis = c(145667346.4375, 138659005.976562, 152031299.125, 127354805.953125, 141803880.734375, 146695055.171875)), row.names = c(NA, 6L), class = "data.frame")
实现方法
方法1:基础R实现(无额外依赖)
不需要安装任何第三方包,两种写法可选:
- 固定位置截取:适合格式100%固定、前缀长度不会变的场景,运行速度最快
# 截掉前9位固定前缀"EURO MTH/",再去掉月年之间的斜杠 df$Monat_converted <- gsub("/", "", substr(df$Monat, 10, nchar(df$Monat)))
- 正则匹配替换:兼容性更强,就算前缀前后有多余空格、小变动也能正确提取
df$Monat_converted <- gsub(".*?(\\d{2})/(\\d{4})$", "\\1\\2", df$Monat)
运行后转换结果对应关系如下:
- EURO MTH/07/2015 → 072015
- EURO MTH/08/2015 → 082015
- EURO MTH/09/2015 → 092015
- EURO MTH/10/2015 → 102015
- EURO MTH/11/2015 → 112015
- EURO MTH/12/2015 → 122015
方法2:tidyverse实现(适配管道工作流)
如果日常用dplyr做数据处理,可以用更易读的字符串函数实现:
library(dplyr) library(stringr) df <- df %>% mutate( Monat_converted = str_remove(Monat, "EURO MTH/") %>% str_replace("/", "") )
补充建议
如果后续需要对日期做排序、计算时间差、按时间聚合等操作,不建议直接存储MMYYYY格式的字符串,可以先转为标准日期类型(统一补每月第一天作为日字段),需要输出展示时再转回MMYYYY格式:
# 转为标准Date类型,支持所有日期运算 df$Monat_date <- as.Date(paste0(df$Monat_converted, "01"), format = "%m%Y%d") # 从标准日期格式化输出MMYYYY df$Monat_show <- format(df$Monat_date, "%m%Y")
内容的提问来源于stack exchange,提问作者rish
相关产品推荐
相关产品推荐

