Я хотел бы рассчитать возраст, основанный на дате рождения.Расчет возраста с использованием мутата с функциями lubridate
Если я использую 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
Однако, когда я пытался использовать mutate
в dplyr
создать новую переменную, я столкнулся с ошибкой.
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)
Это дает ошибку:
Error in mutate_impl(.data, dots) : invalid subscript type 'closure'
Я думал, что это может быть из-за недостающих значений. Итак, я попробовал:
df<-df %>%
mutate(age=as.period(interval(start = birthdate, end = givendate))) %>%
mutate(age=if_else(!is.na(age),age$year,age))
Это также дает ошибку:
Error in mutate_impl(.data, dots) : object 'age' not found
@akrun Когда я применяю первый 'mutate', я бы уже' age' переменной в наборе данных. Я применяю '$ year' по возрасту, поскольку я думал, что могу извлечь« год »этого периода. – HNSKD
«возраст» имеет класс «период», который может не поддерживаться в 'mutate' – akrun