基于年份生成年龄变量的思考

Thoughts on Generating an Age Variable Based on Years

多年来我一直在尝试创建一个虚拟变量。目前,我的数据每个观察都有一个 birth_date 和一个程序 start_date。我已经能够创建一个以天为单位测量个人年龄的变量,但我实际上要寻找的是一个变量:age_join_date 告诉我以下内容:

Individual birth_date    start_date  age_at_join_date
A          1990-12-31    2010-12-31  20 yrs old

B          1990-12-31    2011-12-31  21 yrs old

基本上我关心的是一个人加入该计划时的年龄,而不是他们的实际年龄。

你的问题对我来说不是很清楚,但我认为你可以使用一些 lubridate 函数来达到预期的结果,例如区间运算符 %--%years各自的区间。

library(lubridate)
library(dplyr)

tibble::tribble(
  ~Individual,  ~birth_date,  ~start_date,
  "A", "31/12/1990", "31/12/2010",
  "B", "31/12/1990", "31/12/2011"
) %>% 
  mutate_at(vars(ends_with("date")), dmy) %>%  #just making date columns as date
  mutate(age_at_join_date = birth_date %--% start_date/years(1))

#> # A tibble: 2 x 4
#>   Individual birth_date start_date age_at_join_date
#>   <chr>      <date>     <date>                <dbl>
#> 1 A          1990-12-31 2010-12-31               20
#> 2 B          1990-12-31 2011-12-31               21

reprex package (v0.3.0)

于 2020 年 2 月 12 日创建

---更新答案以反映最新的 TIDYVERSE 语法---

library(lubridate)
library(dplyr)

tibble::tribble(
  ~Individual,  ~birth_date,  ~start_date,
  "A", "31/12/1990", "31/12/2010",
  "B", "31/12/1990", "31/12/2011"
) %>% 
  mutate(across(ends_with("date"), dmy),  #just making date columns as date
         age_at_join_date = birth_date %--% start_date/years(1))
#> # A tibble: 2 × 4
#>   Individual birth_date start_date age_at_join_date
#>   <chr>      <date>     <date>                <dbl>
#> 1 A          1990-12-31 2010-12-31               20
#> 2 B          1990-12-31 2011-12-31               21

reprex package (v2.0.1)

于 2021-09-16 创建