Нахождение возраста с датой рождения и группировка по возрасту в R

Мне дали удостоверение личности клиентов и их DOB.

CUSTOMER ID       DOB
111111            1992-01-09 
222222            1999-02-20 
333333            1997-03-07 
444444            1969-10-15 
555555            1992-11-12 
666666            1939-09-03 

Я хотел бы сгруппировать клиентов по возрасту (подростки: 13 -18 лет, взрослые: 19-25 лет и т. Д.)

Вся помощь приветствуется, спасибо заранее!

2 ответа

Решение

Пытаться

indx <- round(as.numeric(difftime(Sys.Date(), df$DOB, unit='weeks'))/52.25)
df$grp <- cut(indx, breaks=c(0,13,18,25,Inf),
            labels=c('kid', 'Teen', 'Young Adult', 'Old') )

Просто для удовольствия, dplyr версия, которая рассчитывает годы немного по-другому и использует unclass вместо as.numeric:

library(dplyr)

data <- read.table(text="CUSTOMER.ID       DOB
111111            1992-01-09 
222222            1999-02-20 
333333            1997-03-07 
444444            1969-10-15 
555555            1992-11-12 
666666            1939-09-03", stringsAsFactors=FALSE, header=TRUE)

wk_yr <- 0.0191653490489196 # fraction of a year that a week is

data %>% mutate(AGE=(wk_yr * difftime(Sys.Date(), 
                                      as.Date(DOB), 
                                      units="weeks") %>% unclass) %>% round,
                GROUP=cut(AGE, 
                          breaks=c(0, 13, 18, 25, Inf),
                          labels=c('kid', 'Teen', 'Young Adult', 'Old')))

##   CUSTOMER.ID        DOB AGE       GROUP
## 1      111111 1992-01-09  23 Young Adult
## 2      222222 1999-02-20  16        Teen
## 3      333333 1997-03-07  18        Teen
## 4      444444 1969-10-15  45         Old
## 5      555555 1992-11-12  22 Young Adult
## 6      666666 1939-09-03  75         Old
Другие вопросы по тегам