gpt4 book ai didi

r - 使用 mutate 和 lubridate 函数计算年龄

转载 作者:行者123 更新时间:2023-12-04 09:48:28 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Calculate ages in R

(8 个回答)


3年前关闭。




我想根据出生日期计算年龄。

如果我使用 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

最佳答案

lubridate ,

  • Period是带有槽“年份”的 S4 类
  • year 是一个 S3 类对象,具有从周期对象中提取年份槽的方法。

  • https://github.com/hadley/lubridate/blob/master/R/accessors-year.r ) 一个用于提取年份组件的访问器函数。

    因此,以下将起作用
    df %>% mutate(age = year(as.period(interval(start = birthdate, end = givendate))))

    关于r - 使用 mutate 和 lubridate 函数计算年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714319/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com