В R, как я могу рассчитать возраст на основе даты рождения с помощью Eeptools? - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь рассчитать возраст на основе даты рождения, используя eeptools в R.

Я следую за некоторыми учебными страницами, но это не сработало

Мой необработанный набор данных похож на ниже:

   Born       bioguide   
1946-05-27    A000370 
1979-06-19    A000371 
1980-04-18    A000367 
1958-06-12    A000369 
1948-03-23    B001291 
1973-07-24    B000213 
1949-09-15    B001281 
1950-03-12    B001271 
1952-04-20    B001292 
1950-06-20    B001293

А также мой желаемый результат (Возраст может быть немного неправильным, так как я вычисляю вручную):

   Born        Age   
1946-05-27     72 
1979-06-19     41 
1980-04-18     40 
1958-06-12     62 
1948-03-23     72 
1973-07-24     47 
1949-09-15     71 
1950-03-12     70 
1952-04-20     68 
1950-06-20     70

Не могли бы вы помочь мне сделать желаемый вывод?

Большое спасибо,

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Похоже, что у eeptools есть функция age_calc().

your_data <- data.frame(stringsAsFactors=FALSE,
        Born = c("1946-05-27", "1979-06-19", "1980-04-18", "1958-06-12",
                 "1948-03-23", "1973-07-24", "1949-09-15", "1950-03-12",
                 "1952-04-20", "1950-06-20"),
    bioguide = c("A000370", "A000371", "A000367", "A000369", "B001291",
                 "B000213", "B001281", "B001271", "B001292", "B001293")
)

library(eeptools)
#> Loading required package: ggplot2

your_data$age <- eeptools::age_calc(dob = as.Date(your_data$Born),
                                    enddate = Sys.Date(),
                                    units = 'years')

your_data
#>          Born bioguide      age
#> 1  1946-05-27  A000370 73.62459
#> 2  1979-06-19  A000371 40.56158
#> 3  1980-04-18  A000367 39.73224
#> 4  1958-06-12  A000369 61.58075
#> 5  1948-03-23  B001291 71.80328
#> 6  1973-07-24  B000213 46.46569
#> 7  1949-09-15  B001281 70.32048
#> 8  1950-03-12  B001271 69.83281
#> 9  1952-04-20  B001292 67.72678
#> 10 1950-06-20  B001293 69.55884

Создано в 2020-01-10 пакетом Представить (v0.3.0)

Подробнее о eeptools здесь: https://github.com/jknowles/eeptools

1 голос
/ 10 января 2020

Вы можете использовать пакет lubridate, чтобы рассчитать возраст через time_length() + difftime()

library(lubridate)
df <- within(df,age <- round(time_length(difftime(Sys.Date(),as.Date(Born)),"years")))

, такой что

> df
         Born bioguide age
1  1946-05-27  A000370  74
2  1979-06-19  A000371  41
3  1980-04-18  A000367  40
4  1958-06-12  A000369  62
5  1948-03-23  B001291  72
6  1973-07-24  B000213  46
7  1949-09-15  B001281  70
8  1950-03-12  B001271  70
9  1952-04-20  B001292  68
10 1950-06-20  B001293  70
1 голос
/ 10 января 2020

Не уверен, как это сделать с помощью eptools, но без него все должно быть достаточно просто.

dta <- data.frame(born = as.Date(c("1934-02-02", "1956-02-05"),
                  id=c("A","B")))
dta$age <-  as.numeric(round((as.Date("2020-01-01")-dta$born)/365))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...