eeptools中的age_calc会产生计算错误

时间:2019-06-06 21:56:05

标签: r

我正在尝试以月为单位计算年龄,并且某个特定日期给我一个错误的结果

请参见下面的代码。由于某种原因,当日期为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

这是函数错误吗?还是我做错了什么?这是一个问题,因为二月的天数较少吗?

1 个答案:

答案 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的相同日期。