dplyr解决方案,用于将长数据文件制成表格

时间:2019-06-30 17:45:21

标签: r dplyr

data=data.frame("student"=c(1,1,1,1,2,2,2,3,3,3,3,4,4,4,4),
"year"=c(2014,2015,2016,2017,2014,2015,2016,2014,2015,2016,2017,2014,2015,2016,2017),
"grade"=c(9,10,11,12,9,10,11,9,10,11,12,9,10,11,12),
"score"=c(0,0,0,0,0,0,2,0,1,1,2,0,0,1,1))

我想为每个学生报告第一个分数> 0及其发生的等级。如果一个学生的分数不大于0,那么我想报告该学生的最高成绩。

我希望得到的输出是一个表格,该表格显示每个分数的计数和平均成绩。

我手动执行此操作以获得:

分数= 0,计数= 1,平均成绩= 12

得分= 1,计数= 2,平均成绩= 10.5

得分= 2,计数= 1,平均成绩= 11

1 个答案:

答案 0 :(得分:3)

按“学生”分组后,slice根据条件返回第一行,其中“得分”大于0,而if all为“得分”为0,然后返回“等级”为最大(which.max),按“得分”分组的行,获取计数(n())和“等级”的mean < / p>

library(dplyr)
data %>% 
   group_by(student) %>% 
   slice(if(all(score == 0)) which.max(grade) else which.max(score > 0)) %>% 
   group_by(score) %>%
   summarise(count = n(), mean_grade = mean(grade))
# A tibble: 3 x 3
#  score count mean_grade
#  <dbl> <int>      <dbl>
#1     0     1       12  
#2     1     2       10.5
#3     2     1       11