age_calc в eeptools производит ошибку вычисления - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь вычислить возраст в месяцах, и одна конкретная дата дает мне неверный результат

См. Код ниже. По какой-то причине, когда датой является 1 марта 2019 года, возраст в месяцах равен 2,9, что неверно, но для 2 марта 2019 года функция работает лучше, хотя я считаю, что результат должен быть 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 Ответ

1 голос
/ 07 июня 2019

Возможно, это более расширенный комментарий.

eeptools::age_calc, кажется, вычисляет возраст в месяцах нетрадиционным способом (вы можете увидеть исходный код, когда наберете age_calc в терминал R и нажмете Enter).

Возможно, более канонический способ вычислить возраст между двумя датами в месяцах - это просто разделить интервал на единицу продолжительности. Соответствующее и интересное сообщение: Получите разницу между датами по неделям, месяцам, кварталам и годам .

Из указанного поста @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

Эти значения соответствуют значениям, например, Вольфрам Альфа дает на те же даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...