【发布时间】:2019-01-09 01:55:39
【问题描述】:
我的数据看起来像这样。它是一个包含许多人的出生日期(以及其他信息)的数据框。
library(tidyr)
library(dplyr)
library(magrittr)
library(lubridate)
df <- data.frame(
DATE_OF_BIRTH = c("20/10/01" , "15/04/88", "16/12/58", "15/10/91", "09/02/66", "02/07/03", "20/08/96", "22/04/99", "17/04/87", "17/08/56",
"28/05/40", "26/07/59", "02/04/65", "17/08/93", "01/08/86", "30/07/01", "03/09/75", "17/09/65", "16/02/95", "11/06/03",
"26/10/64", "25/02/73", "07/02/90", "31/03/38", "05/03/83", "10/02/61", "01/07/40", "15/08/51", "19/12/75", "25/11/58",
"05/11/81", "05/12/02", "06/05/40", "23/09/69", "17/04/48", "02/07/58", "04/03/98", "26/11/03", "08/01/91", "23/12/07",
"05/05/01", "23/10/08", "01/01/09", "29/10/63", "26/03/09", "03/02/75", "03/09/04", "17/01/80", "19/03/11", "05/07/83")
)
我想做的是根据每个人的出生日期计算截至 2017 年 7 月 1 日的年龄。
要计算年龄,我使用以下代码:
df <- df %>%
mutate(age = interval(start = dmy(df$DATE_OF_BIRTH), end = dmy('01/07/17')) /
duration(num = 1, units = "years"))
这个输出对于某些人是正确的,但对于其他人我得到一个负值。对于这些人来说,他们的实际年龄是年龄abs(age)加17的绝对值。
有人能告诉我如何只获得年龄的正值吗?谢谢。
我看到了以下问题:Efficient and accurate age calculation (in years, months, or weeks) in R given birth date and an arbitrary date,但这不包括将负年龄作为输出的问题。
【问题讨论】:
-
如果出生日期是 1969 年 9 月 23 日(23/09/69),那么他们在 2017 年 7 月 1 日的年龄将为 57 岁。为什么早些年出生的人会得到一个负值作为输出?
-
你怎么知道他们不是在 2069 年 9 月 23 日出生的?