Как я могу получить количество единиц в возрастной группе за период времени? - PullRequest
2 голосов
/ 13 марта 2019

Я пытаюсь найти эффективный способ получения общей численности населения по возрасту за определенный период времени. У меня есть дни рождения, дата начала и окончания (для участия в программе):

people <- data.frame(start_date = as.Date(c("2005-01-01", "2005-01-01", "2006-01-01"), 
              end_date = as.Date(c(NA, NA, "2008-01-01"), 
              bday = as.Date(c("1983-01-01", "1985-01-01", "1986-01-01")))

Я бы хотел закончить тем, что показывает количество детей в возрасте 21, 22, 23 и т. Д. С 2005 по 2015 годы. Иными словами, количество людей, которые когда-либо были в возрастной группе за промежуток времени. В этом примере:

AGE   COUNT
20     2
21     2
22     2
23     3
24     2
25     2

Чтобы добавить еще одну морщину, я использую dbplyr для работы с базами данных sql, поэтому я ищу решение dbplyr или sql. Здесь проживает около 30 миллионов человек, поэтому тяжелую работу нужно делать именно так.

Это похоже на этот вопрос , но не совсем то же самое и не подходит для базы данных.

1 Ответ

0 голосов
/ 14 марта 2019

Для любого, кто сталкивается с этим, вот как я это сделал (не обязательно хорошо):

Сначала найдите «minage» и «maxage» для каждого человека, в месяцах здесь:

DATEDIFF(m, start_date, bday)
DATEDIFF(m, end_date, bday)

Затем перетащите это в R с помощью dbplyr collect в "mydata".Наконец, в течение всех месяцев от 18 до 100 лет:

month_list <- as.list(216:1200) 
all <- lapply(month_list, function(x) {
    mydata %>%
       mutate(in_range = ifelse(x >= abs(minage) & x <= abs(maxage),1,0))%>%    
       summarise(count = sum(in_range, na.rm=T)
})
...