在R语言中计算出生日期和指定时间之间的年龄

3

使用R语言,从给定列birth_date和指定日期"2017-01-01"(格式为"%y-%m-%d"),计算年龄。

name birth_date
 a    1964-09-01
 b    1977-01-02
 c    1977-01-04
 d    1967-01-02
 e    1977-04-02
 f    1945-01-02

 x <- data.frame("name" =c("a","b","c","d","e","f"), "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))
x

difftime(as.Date(x$birth_date),as.Date(2017-01-01), units = "years")

可能是重复的 - https://dev59.com/p10Z5IYBdhLWcg3wvCWd - thelatemail
甚至包括 https://dev59.com/XHA65IYBdhLWcg3w1SRC - thelatemail
4个回答

3
以下函数需要使用 lubridate 包。
它有两个参数:
  1. 一个日期向量。
  2. 一个基准日期,用于计算年龄。默认为当前系统日期。
第一次调用使用默认的 base。 第二次调用将问题中的基准日期作为第二个参数传递。
library(lubridate)

age <- function(birth, base = Sys.Date()){
  i <- interval(birth, base)
  p <- as.period(i)
  year(p)
}

age(x$birth_date)
#[1] 54 42 42 52 42 74

age(x$birth_date, "2017-01-01")
#[1] 52 39 39 49 39 71

1

difftime中没有"years"单位,最大的单位是"weeks"

一种方法是将difftime计算为"days",然后除以365.2422以获取年份差异。

as.numeric(difftime(as.Date("2017-01-01"),as.Date(x$birth_date), units = "days")/365.2422)
#[1] 52.33514 39.99812 39.99264 49.99970 39.75170 71.99880

你还可以使用其他组合,比如选择 单位"周",然后将其转换为相应的 "年"

1

你可以轻松地使用lubridate完成它

x <- data.frame("name" =c("a","b","c","d","e","f"), "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))
x

library(lubridate)

x$birth_date <- ymd(x$birth_date)

x$age <- year(Sys.Date()) - year(x$birth_date)

希望这很简单并且有所帮助。

0

你的代码有几个问题。首先,你的日期(2017-01-01)需要用引号括起来成为字符串('2017-01-01')。其次,你可能想要颠倒日期的顺序。第三,difftime函数没有“年”单位。在不引入其他包或方法的情况下,以下是你可以得到的最佳生日年龄近似值。

x <- data.frame("name" =c("a","b","c","d","e","f"), 
                "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))

as.numeric(difftime(as.Date('2017-01-01'), as.Date(x$birth_date), units = "days")/365.2422)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接