与 lubridate 的时差?
Time difference in years with lubridate?
我想使用 lubridate
根据他们的出生日期和今天的日期来计算年龄。现在我有这个:
library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
today-dob
这给了我他们的天数。
这是我会采用的 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"
请注意,我使用 %/%
作为除法,使用 %%
作为模数,以在减去完整的 years/weeks 后得到剩余的 weeks/days。
as.period(today - dob, unit = "years")
这将给出一条消息,表明它只是一个估计值,因为它没有考虑确切的开始日期和结束日期。
as.duration(interval(dob,today)) %/% as.duration(years(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
另一种 Tidyverse 方法(代码量最少)是
library(tidyverse)
library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
dob %--% today / ddays(365.25)
我想使用 lubridate
根据他们的出生日期和今天的日期来计算年龄。现在我有这个:
library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
today-dob
这给了我他们的天数。
这是我会采用的 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"
请注意,我使用 %/%
作为除法,使用 %%
作为模数,以在减去完整的 years/weeks 后得到剩余的 weeks/days。
as.period(today - dob, unit = "years")
这将给出一条消息,表明它只是一个估计值,因为它没有考虑确切的开始日期和结束日期。
as.duration(interval(dob,today)) %/% as.duration(years(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
另一种 Tidyverse 方法(代码量最少)是
library(tidyverse)
library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
dob %--% today / ddays(365.25)