从列出生日期和指定时间(r)计算年龄
从给定列从列出生日期和指定时间(r)计算年龄,r,timestamp,data-manipulation,R,Timestamp,Data Manipulation,从给定列出生日期和指定日期“2017-01-01”计算年龄,格式为R中的%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"
出生日期和指定日期“2017-01-01”
计算年龄,格式为R中的%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")
姓名出生日期
a 1964-09-01
b 1977-01-02
c 1977-01-04
d 1967-01-02
e 1977-04-02
f 1945-01-02
在difftime
中没有“年”
单位,最大的单位是“周”
一种方法是计算difftime
“天”
,然后除以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
您也可以使用任何其他组合,例如选择单位作为“周”
,然后将其转换为等效的“年”
代码中存在一些问题。首先,您的日期(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)
x您可以使用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)
x以下功能需要软件包lubridate
它有两个参数:
日期向量
计算年龄的基准日期。默认为当前系统日期
第一次调用使用默认的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
库(lubridate)
年龄可能重复-甚至