You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:45:06