我需要帮助从原始数据创建同类群组退出表。
我有一个如下所示的数据集:
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年末退学。
如何从原始数据创建这样的表?
答案 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
group
年份count
年度群组ungroup
spread
年份列在2014年,2015年和2016年mutate
两次获得第1年和第2年的辍学率replace_na
至0 select
同期群组,year_1_drop_rate和year_2_drop_rate 此解决方案采用整洁的数据集,并通过传播年份变量使其成为 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
希望有所帮助