我想在最近的一个生日那个年龄。我怎样才能做到这一点?我不想使用if语句和包。非常感谢!
答案 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