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

如何将DataFrame中MDDYY格式的日期列转换为YYYYMMDD格式

第一个数据集的日期格式为“YYYYMMDD”,对应展示如下:
第一个数据集的日期格式为“YYYYMMDD”

第二个数据集的日期格式为“MDDYY”,对应展示如下:
第二个数据集的日期格式为“MDDYY”

转换实现方案

核心逻辑

  • 先补全MDDYY格式的前导0,统一为6位MMDDYY格式:长度为5的MDDYY字符串(对应1-9月)前补1个0,长度为6的(对应10-12月)保留原值
  • 将6位MMDDYY解析为日期类型,处理两位年份的世纪归属
  • 将日期格式化为YYYYMMDD格式,全程保持数据为data.frame类型

代码示例

1. 依赖lubridate包实现(语法简洁,适配性强)

# 安装依赖(首次使用执行)
# install.packages("lubridate")
library(lubridate)

# 示例第二个数据集(替换为你的实际数据集即可)
df2 <- data.frame(
  id = 1:4,
  raw_date = c("10223", "111522", "63020", "122519"),
  other_col = rnorm(4)
)

# 执行转换
df2$formatted_date <- df2$raw_date |>
  sprintf("%06s", x = _) |> # 补前导0统一为6位
  mdy(cutoff_2000 = 30) |> # 解析为日期,cutoff_2000=30表示两位年<30归21世纪,>=30归20世纪,可按需调整
  format("%Y%m%d") # 输出为YYYYMMDD格式

# 验证类型
class(df2)
# 输出:[1] "data.frame"

2. Base R实现(无需额外安装包)

# 示例数据集
df2 <- data.frame(
  id = 1:4,
  raw_date = c("10223", "111522", "63020", "122519"),
  other_col = rnorm(4)
)

# 补前导0
df2$pad_date <- sprintf("%06s", df2$raw_date)
# 解析+格式转换
df2$formatted_date <- format(as.Date(df2$pad_date, format = "%m%d%y"), "%Y%m%d")

# 验证类型
class(df2)
# 输出:[1] "data.frame"

注意事项

如果你的两位年范围包含19xx的年份,可调整cutoff_2000参数(lubridate方案)或手动偏移年份,避免识别错误。


内容的提问来源于stack exchange,提问作者Yanhao Quan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:09