我正在尝试以月为单位计算年龄,并且某个特定日期给我一个错误的结果
请参见下面的代码。由于某种原因,当日期为2019年3月1日时,月龄为2.9,这是不正确的,但是对于2019年3月2日,该功能效果更好,尽管我认为结果应为4.x。
age_calc(as.Date("10/30/18",format="%m/%d/%y"),as.Date("3/1/19",format="%m/%d/%y"),units="months")
#[1] 2.960829
age_calc(as.Date("10/30/18",format="%m/%d/%y"),as.Date("3/2/19",format="%m/%d/%y"),units="months")
#[1] 3.993088
这是函数错误吗?还是我做错了什么?这是一个问题,因为二月的天数较少吗?
答案 0 :(得分:1)
这也许是更多评论。
eeptools::age_calc
似乎以一种非常规的方式来计算年龄(在R终端中输入age_calc
并按Enter键,您可以看到源代码)。
计算月度两个日期之间的年龄的一种更规范的方法是简单地将间隔除以单位持续时间。 Get the difference between dates in terms of weeks, months, quarters, and years是相关且有趣的帖子。
在上述帖子中,@ Gregor定义了一个方便的功能,其功能类似于eeptools::age_calc
library(lubridate)
age <- function(dob, age.day = today(), units = "years", floor = TRUE) {
calc.age = interval(dob, age.day) / duration(num = 1, units = units)
if (floor) return(as.integer(floor(calc.age)))
return(calc.age)
}
然后使用age
我们得到
age(
as.Date("10/30/18",format="%m/%d/%y"),
as.Date("3/1/19",format="%m/%d/%y"),
units="months", floor = FALSE)
#[1] 4.010959
age(
as.Date("10/30/18",format="%m/%d/%y"),
as.Date("3/2/19",format="%m/%d/%y"),
units="months", floor = FALSE)
#[1] 4.043836
这些值与例如Wolfram Alpha gives的相同日期。