Я вижу, что этот вопрос уже устарел, но на тот случай, если кто-нибудь еще столкнется с этим в поисках ответа.
Кодирование функции age_calc()
использует следующую логику:
if (any(enddate < dob)) {
stop("End date must be a date after date of birth")
}
Таким образом, вы получаете сообщение об ошибке, потому что по крайней мере одно из ваших значений конечной даты («DisbursalDate2» в вашем случае) предшествует значению dob («Date.of.Birth2» в вашем случае). Чтобы узнать причину ошибки, просто выполните:
subset(x, x$DisbursalDate2 < x$Date.of.Birth2)