Necesito ayuda para crear una tabla de abandono de cohortes a partir de datos sin procesar.

Tengo un conjunto de datos que se ve así:

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

Quiero calcular la tasa de abandono por cohorte y obtener una tabla como esta:

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

Para la cohorte 1, la tasa de abandono al final de Y1 es del 60%. (es decir, el 60 por ciento de los estudiantes que se inscribieron originalmente abandonaron al final del año 1. El valor en Y2 significa que el 50% de los que permanecieron al final del año 1, abandonaron al final del año 2.

¿Cómo se puede crear una tabla como esta a partir de los datos sin procesar?

r
2
Chris 12 nov. 2017 a las 04:46

2 respuestas

La mejor respuesta

Aquí hay una solución:

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)

Que devuelve:

# 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 por año
  2. count cohorte por grupos de años
  3. ungroup
  4. spread año en las columnas 2014, 2015 y 2016
  5. mutate dos veces para obtener las tasas de abandono del año 1 y del año 2
  6. replace_na a 0
  7. select cohorte, year_1_drop_rate y year_2_drop_rate

Esta solución toma un conjunto de datos ordenado y lo hace desordenado al distribuir la variable año (es decir, 2014, 2015 y 2016 son columnas separadas).

1
tyluRp 12 nov. 2017 a las 02:54

Tengo una solución simple de data.table:

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

Cuente el número de estudiantes cada año en cada cohorte y cree los nuevos datos. tabla x

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

Aquí hago la relación entre el número de estudiantes y el número de estudiantes al año siguiente (c (NA, N [-. N]) es el vector desplazado de N), que te da el porcentaje de estudiantes perdidos cada año

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

Espero que ayude

0
denis 14 nov. 2017 a las 11:34