R语言中是否有月份名称转数字的函数?日期转换求替代方案
几种将英文月份日期转为MM-DD-YYYY格式的R实现方式
除了tidyverse+lubridate的方案,以下是几种不同的实现方法:
1. 基础R原生方法(无需额外包)
利用基础R的as.Date()解析日期字符串,再用format()输出指定格式:
# 单条日期处理 date_str <- "September 9, 2019" formatted_date <- format(as.Date(date_str, "%B %d, %Y"), "%m-%d-%Y") # 输出:"09-09-2019" # 数据列处理(假设是data.frame) df <- data.frame(raw_date = c("September 9, 2019", "March 15, 2021")) df$formatted_date <- format(as.Date(df$raw_date, "%B %d, %Y"), "%m-%d-%Y")
%B匹配完整英文月份名称(如September),%d匹配日期,%Y匹配四位年份format()中的%m会自动将月份转为两位数字(补前导零)
2. 使用data.table包处理
如果习惯用data.table处理大型数据集,语法更高效简洁:
library(data.table) dt <- data.table(raw_date = c("September 9, 2019", "January 2, 2020")) dt[, formatted_date := format(as.Date(raw_date, "%B %d, %Y"), "%m-%d-%Y")]
3. 手动字符串拆分与映射(无日期函数依赖)
通过拆分字符串+月份映射表实现,适合特殊场景下的自定义处理:
date_str <- "September 9, 2019" # 拆分日期字符串为月份、日期、年份 parts <- strsplit(date_str, split = " |, ")[[1]] # 构建月份名称到两位数字的映射表 month_mapping <- setNames(sprintf("%02d", 1:12), month.name) # 拼接成目标格式 formatted_date <- paste(month_mapping[parts[1]], sprintf("%02d", as.integer(parts[2])), parts[3], sep = "-")
month.name是基础R自带的内置向量,包含所有英文月份名称sprintf("%02d", ...)用于给单个数字的日期/月份补前导零
内容的提问来源于stack exchange,提问作者Akshayd978
相关产品推荐
相关产品推荐

