1 数据处理案例
(1)数据输入
student<-c("John Davis","Angla williams","Bullwink Moose", "David Jones","Janice Markhammer","cheryl Cushing", "Revenen 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 = F) #roster是数据框名字,stringsAsFactors = F 设置字符串不拆开,即名字中间可以有空格
(2)限定小数位数
options(digits = 2) #有效数最小保留2位
(3)成绩标准化 scale()
x<-scale(roster[,2:4]) #标准化之后,让所有的成绩具有可比性
(4)求平均分
score<-apply(x,1,mean) #按行求均值:apply() ,参数设置为1 roster<-cbind(roster,score) #把求出的平均分这一列合并到原来的表roster中,由于不用主键,可以直接使用cbind()来合并
(5)求分位数
y<-quantile(roster$score,c(0.8,0.6,0.4,0.2)) #求四个分位点,分别在0.8,0.6,0.4,0.2处
(6)按分位数给成绩评定等级
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" #新增加一列grade,根据标准化之后的平均分和四个分位点来划分等级
(7)拆分first name和last name
name<-strsplit((roster$student)," ") #拆分字符串使用strsplit,第一个参数roster$student是要拆分的对象,第二个参数(空格“ ”)是指定按照什么来拆分
(8)把拆分后的名字放回数据集
firstname<-sapply(name, "[",1) #提取第一个对象 lastname<-sapply(name, "[",2) #提取第二个对象 解释:拆分之后生成的是一个列表,可以使用函数sapply来提取拆分后的名字,”[” 表示要提取一个对象(元素),1代表提取第一个对象 roster<-cbind(firstname,lastname,roster[,-1]) #cbind()是合并对象的,roster[,-1]意思是保留行并且删掉第1列(负号代表去除)
(9)按lastname排序
roster<-roster[order(lastname,firstname),]
解释:order()排序函数,order(lastname,firstname)先按lastname,再按firstname排序, , 逗号前面是按行排行排序,逗号后面是按列(因为姓氏和名不能拆开,所以按行排序)