R语言--数据处理案例(标准化、合并、排序等)

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])

解释:标准化之后,让所有的成绩具有可比性

 R语言--数据处理案例(标准化、合并、排序等)

(4)求平均分

score<-apply(x,1,mean)

解释:按行求均值:apply() ,参数设置为1

roster<-cbind(roster,score)

解释:把求出的平均分这一列合并到原来的表roster中,由于不用主键,可以直接使用cbind()来合并

 R语言--数据处理案例(标准化、合并、排序等)

(5)求分位数

y<-quantile(roster$score,c(0.8,0.6,0.4,0.2))

解释:求四个分位点,分别在0.8,0.6,0.4,0.2处

 R语言--数据处理案例(标准化、合并、排序等)

(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,根据标准化之后的平均分和四个分位点来划分等级

 R语言--数据处理案例(标准化、合并、排序等)

(7)拆分first name和last name

 name<-strsplit((roster$student)," ")

解释:拆分字符串使用strsplit,第一个参数roster$student是要拆分的对象,第二个参数(空格“ ”)是指定按照什么来拆分

 R语言--数据处理案例(标准化、合并、排序等)

(8)把拆分后的名字放回数据集  

firstname<-sapply(name, "[",1)  #提取第一个对象

lastname<-sapply(name, "[",2)  #提取第二个对象

解释:拆分之后生成的是一个列表,可以使用函数sapply来提取拆分后的名字,”[” 表示要提取一个对象(元素),1代表提取第一个对象

roster<-cbind(firstname,lastname,roster[,-1])

解释:cbind()是合并对象的,roster[,-1]意思是保留行并且删掉第1列(负号代表去除)

 R语言--数据处理案例(标准化、合并、排序等)

(9)按lastname排序

 roster<-roster[order(lastname,firstname),]

解释:order()排序函数,order(lastname,firstname)先按lastname,再按firstname排序, , 逗号前面是按行排行排序,逗号后面是按列(因为姓氏和名不能拆开,所以按行排序)

 R语言--数据处理案例(标准化、合并、排序等)

 

上一篇:R语言--控制流和自定义函数(if、else、while、switch)


下一篇:Linux笔记06(部分)