首页 > 技术文章 > R语言--数据处理案例(标准化、合并、排序等)

YY-zhang 2021-07-04 13:40 原文

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 namelast 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排序, 逗号前面是按行排行排序,逗号后面是按列(因为姓氏和名不能拆开,所以按行排序)

 

推荐阅读