我想根据出生日期计算年龄。
如果我使用lubridate,只需按以下方式运行,如 Efficient and accurate age calculation (in years, months, or weeks) in R given birth date and an arbitrary date:
以下内容可以使用,但它会提供所有日期和时间值,即年、月、日、小时、分钟和秒。
以下方法无效:
它也给出了一个错误:
“mutate_impl(.data, dots)中的错误:找不到'age'对象”
如果我使用lubridate,只需按以下方式运行,如 Efficient and accurate age calculation (in years, months, or weeks) in R given birth date and an arbitrary date:
as.period(new_interval(start = birthdate, end = givendate))$year
但是,当我尝试在dplyr中使用mutate创建新变量时,遇到了错误。library(dplyr); library(lubridate)
birthdate <- ymd(c(NA, "1978-12-31", "1979-01-01", "1962-12-30"))
givendate <- ymd(c(NA, "2015-12-31", "2015-12-31", NA))
df <- data.frame(
birthdate = birthdate,
givendate = givendate)
以下内容可以使用,但它会提供所有日期和时间值,即年、月、日、小时、分钟和秒。
df<-df %>% mutate(age=as.period(interval(start = birthdate, end = givendate)))
# df
# birthdate givendate age
# 1 <NA> <NA> <NA>
# 2 1978-12-31 2015-12-31 37y 0m 0d 0H 0M 0S
# 3 1979-01-01 2015-12-31 36y 11m 30d 0H 0M 0S
# 4 1962-12-30 <NA> <NA>
以下方法无效:
df<-df %>%
mutate(age=as.period(interval(start = birthdate, end = givendate))$year)
出现错误:
在 mutate_impl(.data, dots) 中出现错误:无效的下标类型 'closure'
我认为可能是由于缺失值导致的。因此,我尝试了以下操作:
df<-df %>%
mutate(age=as.period(interval(start = birthdate, end = givendate))) %>%
mutate(age=if_else(!is.na(age),age$year,age))
它也给出了一个错误:
“mutate_impl(.data, dots)中的错误:找不到'age'对象”
mutate
时,数据集中已经有了age
变量。我对年龄应用$year
,因为我认为我可以提取该期间的年份
。 - HNSKDmutate
函数支持。 - akrun