R语言——数据处理的基础解决方案(案例1)

step0.问题描述

一组学生参加了数学、科学、英语考试,为了给所有学生确定一个单一的成绩衡量标准,需要将这些科目的成绩组合起来。另外,你想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推。最后,你希望按字母对学生进行排序。数据如下表所示。


学生考试数据.png

step1.输入数据

输入原始数据,使用数据框存储以上数据至变量roster中。

options(digits=2)
Student <- c("John Davis","Angela Williams","Bullwinkle Moose",
             "David Jones","Janice Markhammer",
             "Cheryl Cushing","Reuven Ytzrhak",
             "Greg Knox","Joel England","Mary Rayburn")
math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
english <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
roster <- data.frame(Student, math, science, english, 
                     stringsAsFactors=FALSE)

step2.数据标准化

使用scale()函数,对数据进行标准化处理,这样每科的成绩均使用单位标准差来进行表示,而不是以原始尺度来表示了,便于比较以及整合。

z <- scale(roster[,2:4])
标准化结果.png

step3.计算综合得分

通过mean()函数来计算各行的均值以获得综合得分,并使用cbind()函数将其添加到表中。

score <- apply(z, 1, mean)
roster <- cbind(roster, score)
整合后数据.png

step4.分位

通过quantile()函数,对学生的综合得分进行分位操作,依次计算出20%,40%...80%的分位点。

y <- quantile(score, c(.8,.6,.4,.2))
分位点.png

step5.换算得分等级

通过逻辑运算符,将百分位数平明重新编码为一个新的类别,并在表中使用变量grade表示。

roster$grade[score >= y[1]] <- "A"
roster$grade[score < y[1] & score >= y[2]] <- "B"
roster$grade[score < y[2] & score >= y[3]] <- "C"
roster$grade[score < y[3] & score >= y[4]] <- "D"
roster$grade[score < y[4]] <- "F"
重编码.png

step6.名称拆分

使用strplit()函数将学生姓名拆分为firstname、lastname,并重新赋值到表中

name <- strsplit((roster$Student), " ")
Lastname <- sapply(name, "[", 2)
Firstname <- sapply(name, "[", 1)
roster <- cbind(Firstname,Lastname, roster[,-1])
姓名拆分.png

step7.排序

使用order()函数依姓氏、名称进行排序。

roster <- roster[order(Lastname,Firstname),]
最终结果.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。