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

如何在R语言中翻转出生日期的月日生成新列并处理无效日期

解决方案:互换日期的月份与日期并处理无效值

方法一:使用lubridate包(推荐,简洁直观)

lubridate包提供了专门的日期处理工具,能轻松提取日期的年、月、日部分,代码实现如下:

library(dplyr)
library(lubridate)

# 初始化数据并转换为日期类型
dob <- as.data.frame(c("1994-01-10","2003-03-06","1995-05-23")) %>% 
  rename(dob = 1) %>% 
  mutate(dob = as.Date(dob))

# 生成互换月日的新列
dob <- dob %>%
  mutate(
    year = year(dob),
    month = month(dob),
    day = day(dob),
    # 按年-日-月拼接后转日期,无效日期自动转为NA
    dob_flipped = as.Date(paste(year, day, month, sep = "-"))
  ) %>%
  select(-year, -month, -day) # 移除中间临时列

方法二:仅使用基础R与dplyr

如果不想额外加载包,用基础R的format()函数也能完成需求:

library(dplyr)

# 初始化数据并转换为日期类型
dob <- as.data.frame(c("1994-01-10","2003-03-06","1995-05-23")) %>% 
  rename(dob = 1) %>% 
  mutate(dob = as.Date(dob))

# 生成互换月日的新列
dob <- dob %>%
  mutate(
    # 按格式提取年、月、日
    year = format(dob, "%Y"),
    month = format(dob, "%m"),
    day = format(dob, "%d"),
    # 拼接并转换日期,无效值自动设为NA
    dob_flipped = as.Date(paste(year, day, month, sep = "-"))
  ) %>%
  select(-year, -month, -day)

结果说明

运行上述代码后,dob$dob_flipped的结果完全符合预期:

  • "1994-10-01"(原日期1994-01-10互换月日有效)
  • "2003-06-03"(原日期2003-03-06互换月日有效)
  • NA(原日期1995-05-23互换后为1995-23-05,属于无效日期)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:44:59