您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > R语言学习系列06-修改变量名-数据排序-随机抽样
06.修改变量名,数据排序,随机抽样一、变量的重命名1.用交互式编辑器若修改数据集x的变量名,键入函数fix(x),即可打开交互式编辑器界面。score-data.frame(student=c(A,B,C,D),gender=c(M,M,F,F),math=c(90,70,80,60),Eng=c(88,78,69,98),pl=c(66,59,NA,88))fix(score)score.list-as.list(score)#将score转化为列表fix(score.list)(1)若数据集为矩阵或数据框将打开“数据编辑器”,单击要修改的变量名,在弹出的“变量编辑器”修改即可:(2)若数据集为列表将交互式编辑器为一个记事本,只需修改“.Names”之后对应的变量名即可:2.用函数rename()reshape包中的函数rename(),用来修改数据库和列表的变量名,但不能修改矩阵的变量名,基本格式为:rename(x,c(oldname=newname,...))其中,oldname为原变量名,newname为新变量名。library(reshape)rename(score,c(pl=chinese))studentgendermathEngchinese1AM9088662BM7078593CF8069NA4DF609888rename(score.list,c(pl=chinese))$student[1]ABCDLevels:ABCD$gender[1]MMFFLevels:FM$math[1]90708060$Eng[1]88786998$chinese[1]6659NA88注意:原数据集中的变量名并未被修改。3.用函数names()和rename()一样可用来修改数据框和列表的变量名,不能修改矩阵的变量名;区别在于:names()会在原数据集中修改变量名。其基本格式为:names(x)[i]-newnamenames(score)[5]=chinesescorestudentgendermathEngchinese1AM9088662BM7078593CF8069NA4DF6098884.用函数colnames()和rownames()用来修改矩阵的变量名(行名和列名),也能修改数据框的行名和列名。基本格式为:rownames(x)[i]-newnamecolnames(score)[5]=ChinesescorestudentgendermathEngChinese1AM9088662BM7078593CF8069NA4DF609888rownames(score)=letters[1:4]scorestudentgendermathEngChineseaAM908866bBM707859cCF8069NAdDF609888二、数据排序1.函数sort(),基本格式:sort(x,decreasing=FALSE,na.last=FALSE,...)其中,x为排序对象(数值型或字符型);decreasing默认为FALSE即升序,TURE为降序;na.last默认为FALSE(NA值将被删除),若为TRUE,则将向量中的NA值放到序列末尾。sort(score$math)[1]60708090sort(score$math,decreasing=TRUE)[1]90807060sort(score$Chinese,na.last=TRUE)[1]596688NA2.函数rank()返回值是该向量中对应元素的秩(排名),基本格式为:rank(x,na.last=FALSE,ties.method=...)其中,ties.method指定对数据集中的重复数据的秩的处理方式:“average”——取平均值秩(默认)“first”——位于前面的数据的秩取小,依次递增“random”——随机定义重复秩“max”——取最大重复秩“min”——取最小重复秩x-c(3,4,2,5,5,3,8,9)rank(x)[1]2.54.01.05.55.52.57.08.0rank(x,ties.method=first)[1]24156378rank(x,ties.method=random)[1]34165278rank(x,ties.method=max)[1]341663783.函数order()对数据进行排序,返回值是对应“排名”的元素所在向量中的位置,即最小值、次小值、...、最大值所在的位置。基本格式为:order(x,decreasing=FALSE,na.last=FALSE,...)不同于前两个函数,order()还可以对数据框进行排序:data_frame[order(data_frame$v1,data_frame$v2,…),]若v1值相同,则按v2升序排序;要将升序改为降序,在变量前添加负号,或用decreasing=TRUE即可。order(score$math)[1]4231score[order(score$math),]studentgendermathEngchinese4DF6098882BM7078593CF8069NA1AM908866score[order(-score$math),]studentgendermathEngchinese1AM9088663CF8069NA2BM7078594DF6098884.函数rev()求逆序,将序列进行反转,即1,2,3变成3,2,1三、简单随机抽样用少量数据测试数据集时,常用随机抽样方法从整体中选出部分样本数据。简单随机抽样,是指从总体N个样本中任意抽取n个样本,每个样本被抽中的概率相等;分为重复抽样(有放回)、不重复抽样(不放回)。使用sampling包实现。1.有放回简单随机抽样函数srswr(),基本格式为:srswr(n,N)表示从总体N中有放回地随机抽取n个样本,返回一个长度为N的向量,每个分量分别表示各元素被抽取到的次数。library(sampling)LETTERS[1]ABCDEFGHIJK[12]LMNOPQRSTUV[23]WXYZs-srswr(10,26)s[1]20110000100200030000000[24]000ind-(1:26)[s!=0]#被抽到的样本编号ind[1]13491216n-s[s!=0]#被抽到的样本的被抽到的次数n[1]211123ind-rep(ind,times=n)#按次数重复被抽到的样本编号ind[1]113491212161616sample-LETTERS[ind]#被抽到的字母sample[1]AACDILLPPP2.不放回简单随机抽样函数srswor(),格式和返回值同srswr(),注意返回值向量中只有0和1.s-srswor(10,26)s[1]10000101001000000111001[24]101ind-(1:26)[s!=0]ind[1]16811181920232426sample-LETTERS[ind]sample[1]AFHKRSTWXZ3.函数simple()实现有放回和不放回的简单随机抽样,基本格式为:sample(x,size,replace=FALSE)其中,x为数据集;size为抽取样本数;replace指定是否放回,默认为FALSE(不放回),TURE为有放回。也可对数据进行随机分组:sample(num,size,replace=TRUE,prob=NULL)其中,num为分组数;size为抽取样本数;replace必须为TRUE;prob为权重向量(分组比例)。sample(LETTERS,10,replace=TRUE)#有放回简单随机抽样[1]KCEJZCWEGBsample(LETTERS,10,replace=FALSE)#无放回简单随机抽样[1]ISTADQRXJP#将26个字母随机分为两组,比例是0.7:0.3n-sample(2,26,replace=TRUE,prob=c(0.7,0.3))n[1]11122111211221211111122[24]111sample1-LETTERS[n==1]#第1组sample1[1]ABCFGHJKNPQ[12]RSTUXYZsample2-LETTERS[n==2]#第2组sample2[1]DEILMOVW主要参考文献:[1]张良均,谢佳标,杨坦,肖刚.R语言与数据挖掘.机械工业出版社,2016.
本文标题:R语言学习系列06-修改变量名-数据排序-随机抽样
链接地址:https://www.777doc.com/doc-3887902 .html