与R匹配的最近年份的舍入日期

时间:2014-07-31 07:46:26

标签: r date rounding

我想在最近的一个生日那个年龄。我怎样才能做到这一点?我不想使用if语句和包。非常感谢!

3 个答案:

答案 0 :(得分:2)

字符串比较是一种方法。

birth.date <- as.POSIXct("1970-07-08")
current.date <- as.POSIXct("2014-07-31")

years <- as.integer(sub("-.*$", "", c(birth.date, current.date)))
month.days <- sub("^\\d+-", "", c(birth.date, current.date))

diff(years) + order(month.days)[2] - 1

你可以用difftime来做,但不幸的是你必须以天为单位,因为不支持几个月或几年(因为我认为它们没有恒定的长度)。

as.integer(ceiling(
    difftime(current.date, birth.date, units="days") / 365.2424
))

365.2424 位占闰年(algorithm)。

答案 1 :(得分:2)

这样做的一种方法是减去年份,然后如果生日尚未过去则再减去1。使用POSIXlt对象比Date对象容易一些,因为您可以在不必使用多个as.integer的情况下访问数字。

calcAge <- function(dr,db)
{
    dr <- as.POSIXlt(dr)
    db <- as.POSIXlt(db)
    dr$year-db$year-(dr$mon<db$mon | (dr$mon==db$mon & dr$mday<db$mday))
}

calcAge(Sys.Date(), as.Date(c("1967-04-01","1991-08-12")))
[1] 47 22

答案 2 :(得分:0)

pyenv 1.2.2