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
解决方案
按'student'分组后,slice
根据条件返回第一行'score'大于0且if
all
'score'为0的行,然后返回'grade'为max的行(which.max
),分组通过'score',得到count(n()
)和mean
'grade'
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
推荐阅读
- python - AWS Chalice+API Gateway 中如何支持常见的 RESTful HTTP 响应码?
- fork - 分叉到 libVLC 时的非常奇怪的行为
- javascript - 模拟复选框上的“shift”按键以选择多行
- python - 作为node.js的子进程产生时Python string.decode()抛出错误
- flutter - 如何在 TikTok 上实现缓存的视频源
- android - expandablelistview 在我的应用程序中第二次运行时显示黑屏
- timescaledb - TimescaleDB:在功能测试中强制刷新或稳定连续聚合视图
- python - 如果单击眼睛图标显示/隐藏密码(QPushButton)
- r - 将宽数据重塑为长格式
- c# - 从映射的网络驱动器读取目录