gpt4 book ai didi

r - 将 r 中的一列从出生日期更改为年龄

转载 作者:行者123 更新时间:2023-12-01 20:22:27 26 4
gpt4 key购买 nike

我是第一次使用 data.table。

我的表中有大约 400,000 个年龄的列。我需要将它们从出生日期转换为年龄。

最好的方法是什么?

最佳答案

我一直在思考这个问题,到目前为止对这两个答案都不满意。我喜欢使用 lubridate,就像 @KFB 所做的那样,但我也希望将东西很好地封装在一个函数中,就像我使用 eeptools 包的答案一样。因此,这是一个使用 lubridate 间隔方法和一些不错的选项的包装函数:

#' Calculate age
#'
#' By default, calculates the typical "age in years", with a
#' \code{floor} applied so that you are, e.g., 5 years old from
#' 5th birthday through the day before your 6th birthday. Set
#' \code{floor = FALSE} to return decimal ages, and change \code{units}
#' for units other than years.
#' @param dob date-of-birth, the day to start calculating age.
#' @param age.day the date on which age is to be calculated.
#' @param units unit to measure age in. Defaults to \code{"years"}. Passed to \link{\code{duration}}.
#' @param floor boolean for whether or not to floor the result. Defaults to \code{TRUE}.
#' @return Age in \code{units}. Will be an integer if \code{floor = TRUE}.
#' @examples
#' my.dob <- as.Date('1983-10-20')
#' age(my.dob)
#' age(my.dob, units = "minutes")
#' age(my.dob, floor = FALSE)
age <- function(dob, age.day = today(), units = "years", floor = TRUE) {
calc.age = lubridate::interval(dob, age.day) / lubridate::duration(num = 1, units = units)
if (floor) return(as.integer(floor(calc.age)))
return(calc.age)
}

使用示例:

> my.dob <- as.Date('1983-10-20')

> age(my.dob)
[1] 31

> age(my.dob, floor = FALSE)
[1] 31.15616

> age(my.dob, units = "minutes")
[1] 16375680

> age(seq(my.dob, length.out = 6, by = "years"))
[1] 31 30 29 28 27 26

关于r - 将 r 中的一列从出生日期更改为年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096485/

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