如何在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
相关产品推荐
相关产品推荐

