基于年份生成年龄变量的思考
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 创建
多年来我一直在尝试创建一个虚拟变量。目前,我的数据每个观察都有一个 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 创建