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

使用dplyr将数据框中int类型DOB变量转换为yymmdd格式日期

搞定DOB日期格式转换的问题~

先说说你之前代码为啥没成功:

  • 第一个写法as.Date(as.numeric(DOB)):as.Date()默认会把数值当成从1970年1月1日开始算的天数,这和你手里YYYYMMDD格式的生日数字完全不搭,结果肯定不对。
  • 第二个写法的格式参数写错啦:%M是分钟的意思,你要的月份是%m;%D是月/日/年的简写,也不符合你的输入格式,正确的格式应该是%Y%m%d,对应你手里的“年-月-日”数字串。

正确的实现代码

用dplyr的管道语法来写更清晰,先把数字类型的DOB转成字符,再用as.Date()指定正确的格式:

library(dplyr)

# 先还原你的示例数据(方便测试)
Customer <- tibble(
  DOB = c(19660422, 19620329, 19500419, 19630405, 19670327, 19540408),
  person_age = c(53, 57, 69, 56, 52, 65),
  Twentile = c(6, 17, 1, 12, 13, 4)
)

# 执行转换:Twentile转因子,DOB转日期类型
Customer <- Customer %>%
  mutate(
    Twentile = factor(Twentile),
    DOB = as.Date(as.character(DOB), format = "%Y%m%d")
  )

# 看看转换后的结果
print(Customer)

要是你需要yymmdd格式的字符串

如果你最终想要的是yymmdd(比如660422)这种格式的字符串,而不是标准日期类型,可以在转换后用format()调整输出格式:

Customer <- Customer %>%
  mutate(
    Twentile = factor(Twentile),
    # 先转成日期类型,再格式化为yymmdd的字符串
    DOB_yymmdd = format(as.Date(as.character(DOB), format = "%Y%m%d"), "%y%m%d")
  )

这样DOB字段是标准日期类型(方便后续做日期计算,比如算年龄差),DOB_yymmdd就是你要的短格式字符串啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:19