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

如何在R中根据出生日期计算精确月龄?

解决方案:用lubridate包精准计算月龄

要实现精准计算(考虑闰年、不同月份天数差异),推荐使用lubridate包,它可以基于实际日期的时间间隔来计算月龄,完全匹配你的需求。

步骤1:加载包并处理数据

先确保安装并加载lubridate,再把原始字符串日期转换为R可识别的日期格式(你的日期是日/月/年格式,用dmy()函数转换):

# 首次使用时安装包
install.packages("lubridate")

# 加载包
library(lubridate)

# 导入你提供的数据
data <- structure(list(ID = c("A", "B", "C", "D", "E", "F", "G", "H", 
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U"
), BIRTH = c("23/04/2009", "24/03/2010", "28/12/2009", "19/08/2009", 
"02/12/2009", "12/05/2010", "26/02/2010", "07/10/2009", "22/04/2010", 
"01/04/2010", "31/03/2010", "27/01/2010", "23/09/2009", "28/09/2009", 
"28/10/2009", "21/06/2009", "28/10/2009", "19/08/2009", "10/09/2009", 
"13/07/2009", "22/09/2009"), YEAR = c("2009", "2010", "2009", 
"2009", "2009", "2010", "2010", "2009", "2010", "2010", "2010", 
"2010", "2009", "2009", "2009", "2009", "2009", "2009", "2009", 
"2009", "2009")), row.names = c(NA, -21L), class = "data.frame")

# 转换出生日期为日期格式
data$birth_date <- dmy(data$BIRTH)

# 指定目标日期(31/08/2020)并转换格式
target_date <- dmy("31/08/2020")

步骤2:精准计算月龄

使用interval()创建出生日期到目标日期的时间间隔,再用time_length()将间隔转换为月份单位,这个方法会自动考虑闰年、不同月份的天数差异:

# 计算月龄,保留两位小数(可按需调整)
data$age_months <- time_length(interval(data$birth_date, target_date), unit = "months")

# 查看前几行结果
head(data[, c("ID", "BIRTH", "age_months")])

运行后会得到类似结果:

ID      BIRTH age_months
1  A 23/04/2009  136.2667
2  B 24/03/2010  125.2333
3  C 28/12/2009  128.1000

补充:整数月龄计算

如果需要向下取整的整数月龄,直接套floor()函数即可:

data$age_months_int <- floor(time_length(interval(data$birth_date, target_date), unit = "months"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:11:29