如何获得某个时期内某个年龄段的单位数?

时间:2019-03-12 23:51:31

标签: r dplyr dbplyr

我正在尝试找到一种有效的方法来获取一段时间内按年龄划分的总人口。我有生日,开始日期和结束日期(因为在程序中):

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")))

最后,我想说一下显示2005年至2015年21岁,22岁,23岁等年龄段的人数。换句话说,在该时间间隔内处于某个年龄段的人数。在此示例中:

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

要增加一点麻烦,我正在使用dbplyr处理sql数据库,因此我正在寻找dbplyr或sql解决方案。这里大约有三千万人,所以繁重的工作必须那样做。

这与this question类似,但不完全相同,并且对数据库不友好。

1 个答案:

答案 0 :(得分:0)

对于任何偶然发现此问题的人,这就是我的做法(不一定很好):

首先,找到每个人的“最小”和“最大”,以月为单位:

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

然后使用dbplyr将其拉到R中,并收集到“ 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)
})