从原始数据创建同类辍学率表

时间:2017-11-12 01:46:22

标签: r

我需要帮助从原始数据创建同类群组退出表。

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

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年末退学。

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

2 个答案:

答案 0 :(得分: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两次获得第1年和第2年的辍学率
  6. replace_na至0
  7. select同期群组,year_1_drop_rate和year_2_drop_rate
  8. 此解决方案采用整洁的数据集,并通过传播年份变量使其成为 untidy (即2014年,2015年和2016年是单独的列)。

答案 1 :(得分:0)

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

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

计算每个队列中每年的学生人数并创建新数据。表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

希望有所帮助