【问题标题】:Create cohort dropout rate table from raw data从原始数据创建队列辍学率表
【发布时间】:2017-11-12 01:46:22
【问题描述】:

我需要帮助从原始数据创建一个同期群退出表。

我有一个如下所示的数据集:

DT<-data.table(
id =c (1,2,3,4,5,6,7,8,9,10,
     11,12,13,14,15,16,17,18,19,20,
     21,22,23,24,25,26,27,28,29,30,31,32,33,34,35),
year =c (2014,2014,2014,2014,2014,2014,2014,2014,2014,2014,
       2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,
   2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016),
cohort =c(1,1,1,1,1,1,1,1,1,1,
        2,2,2,1,1,2,1,2,1,2,
        1,1,3,3,3,2,2,2,2,3,3,3,3,3,3))

我想按群组计算辍学率,得到一个这样的表格:

cohortdt<-data.table(
cohort =c(1,2,3),
drop_rateY1 =c(.60,0.0,0.0),
droprate_Y2 =c (.50,.33,0.0))

对于队列 1,Y1 年末的辍学率为 60%。 (即最初入学的学生中有 60% 在第 1 年末辍学。Y2 中的值表示在第 1 年末留校的学生中有 50% 在第 2 年末辍学。

如何根据原始数据创建这样的表?

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一种解决方案:

    library(tidyverse)
    
    DT %>% 
      group_by(year) %>% 
      count(cohort) %>% 
      ungroup() %>% 
      spread(year, n) %>% 
      mutate(year_1_drop_rate = 1 - (`2015` / `2014`),
             year_2_drop_rate = 1 - (`2016` / `2015`)) %>% 
      replace_na(list(year_1_drop_rate = 0.0,
                      year_2_drop_rate = 0.0)) %>% 
      select(cohort, year_1_drop_rate, year_2_drop_rate)
    

    返回:

    # A tibble: 3 x 3
      cohort year_1_drop_rate year_2_drop_rate
       <dbl>            <dbl>            <dbl>
    1      1              0.6        0.5000000
    2      2              0.0        0.3333333
    3      3              0.0        0.0000000
    
    1. group 按年份
    2. count 按年级分组
    3. ungroup
    4. spread 2014、2015 和 2016 列中的年份
    5. mutate 两次获取第一年和第二年的辍学率
    6. replace_na转0
    7. select 队列、year_1_drop_rate 和 year_2_drop_rate

    此解决方案采用 tidy 数据集,并通过分散年份变量使其untidy(即 2014、2015 和 2016 是单独的列)。

    【讨论】:

      【解决方案2】:

      我有一个简单的 data.table 解决方案:

      x <- DT[,.N, by = .(cohort,year)]
      

      计算每个队列每年的学生人数并创建新的 data.table x

      x[,drop := (1-N/(c(NA,N[-.N])))*100,by = cohort]
      

      在这里,我计算学生人数与之后一年的学生人数之间的比率(c(NA,N[-.N]) 是 N 的移位向量),即每个学生流失的百分比年份

      x[,.SD,by = cohort]
         cohort year  N     drop
      1:      1 2014 10       NA
      2:      1 2015  4 60.00000
      3:      1 2016  2 50.00000
      4:      2 2015  6       NA
      5:      2 2016  4 33.33333
      6:      3 2016  9       NA
      

      希望对你有帮助

      【讨论】:

      • 没有。它实际上显示了每年仍在入学的学生人数。
      • 所以修改你原来的问题,看起来你明确地说相反:“最初入学的学生中有 60% 在第一年年底辍学”。如果您希望仍然注册的百分比,它只是 100 - 辍学。
      • 我的问题是正确的。您的解决方案不正确。您的解决方案计算了 2015 年队列 1 的 40% 辍学率。它应该显示 60%,就像在 tyluRp 的解决方案中一样。
      • @Chris 对不起,你是对的。我按照我之前的评论编辑了我的解决方案。我的解题工作,不限年数,需要两行。希望你喜欢它
      猜你喜欢
      • 2018-11-16
      • 1970-01-01
      • 2020-09-28
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多