首页 > 解决方案 > 从出生日期变量 (R) 计算今天的年龄

问题描述

我有一个数据框,其中包含个人 ID 的出生日期信息。

mydf <- data.frame(id=c(1,2),
                   dtbirth=as.Date(c("2012-01-01","2013-04-01")))

我想计算个人截至今天的年龄。下面的代码似乎有效,但将“天”输出到新变量age

mydf %>%
  mutate(age=floor((today()-dtbirth)/365))

标签: rdate

解决方案


我们可以用 wrap withas.integer/as.numeric来移除class属性difftime

mydf %>%
  mutate(age= as.integer(floor((today()-dtbirth)/365)))

-输出

#  id    dtbirth age
#1  1 2012-01-01   9
#2  2 2013-04-01   8

默认情况下,当我们使用 时-difftime通过"auto"

mydf %>%
   mutate(age = today() - dtbirth)
#  id    dtbirth       age
#1  1 2012-01-01 3430 days
#2  2 2013-04-01 2974 days

如果我们需要更精细的控制,使用difftime它自己并指定units

mydf %>%
     mutate(age = difftime(today(), dtbirth, units = 'weeks'))
#  id    dtbirth            age
#1  1 2012-01-01 490.0000 weeks
#2  2 2013-04-01 424.8571 weeks

我们不能units超过“周”,因为可用的选项是

difftime(time1, time2, tz, units = c("auto", "secs", "mins", "hours", "days", "weeks"))

它被称为

诸如“月”之类的单位是不可能的,因为它们的长度不是恒定的。要创建月、季或年的间隔,请使用 seq.Date 或 seq.POSIXt。


推荐阅读