【问题标题】:How can I get the number of units in an age group over a time period?如何获取一段时间内某个年龄段的单位数?
【发布时间】:2019-03-12 23:51:31
【问题描述】:

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

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 解决方案。这里大约有 3000 万人,因此必须以这种方式完成繁重的工作。

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

【问题讨论】:

    标签: r dplyr dbplyr


    【解决方案1】:

    我就是这样做的,但它可能不是最有效的方法:

    首先,在这里找到每个人的“minage”和“maxage”,以月为单位:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多