与lubridate的年份时差?

时间:2015-08-31 13:52:10

标签: r lubridate

我想用lubridate来计算出生日期和今天的日期。现在我有这个:

library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
today-dob

这给了我他们几天的年龄。

5 个答案:

答案 0 :(得分:13)

这是我采取的lubridate方法:

interval(dob, today) / years(1)

得出32年的答案。

请注意,该函数会抱怨它无法表达当年剩余部分。这是因为年份不是一个固定的概念,即闰年为366,非闰年为365。您可以获得有关周数和天数的更多详细信息的答案:

interval_period = interval(dob, today)
full_year = interval_period %/% years(1)
remaining_weeks = interval_period %% years(1) %/% weeks(1)
remaining_days = interval_period %% years(1) %% weeks(1) %/% days(1)
sprintf('Your age is %d years, %d weeks and %d days', full_year, remaining_weeks, remaining_days)
# [1] "Your age is 32 years, 51 weeks and 1 days"

请注意,我使用%/%进行除法,使用%%作为模数,以获得减去整年/周后的剩余周/天。

答案 1 :(得分:4)

as.period(today - dob, unit = "years")

这将显示一条消息,它只是一个估计值,因为它没有考虑确切的开始日期和结束日期。

答案 2 :(得分:4)

as.duration(interval(dob,today)) %/% as.duration(years(1))

应该没有错误地完成工作。

答案 3 :(得分:2)

另一种 Tidyverse 方法(代码量最少)是

library(tidyverse)
library(lubridate)

today<-mdy(08312015)
dob<-mdy(09071982)

dob %--% today / ddays(365.25)

答案 4 :(得分:1)

这是一个古老的问题,但是我仍然缺少以下干净的方法。 (Tidyverse仅对于“%>%”运算符是必需的。)

library(tidyverse)
library(lubridate)

today<-mdy(08312015)
dob<-mdy(09071982)

interval(dob, today) %>%
  as.numeric('years')

# 32.98015 - you have to decide how to deal with the fraction of a year