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
答案 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