您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > R语言学习系列17-数据整合Ⅰ—基本操作
16.数据整合Ⅰ—基本操作目录:一.数据框创建新变量二、变量的重命名三.变量的重新编码四.数据排序五.数据合并六.选取数据的子集七.简单的随机抽样正文:一、数据框创建新变量假设有MyData数据框,其中变量为x1,x2.现创建名为sumx和meanx的新变量,分别存储变量x1与x2的加和与均值。#方法1MyData$sumx-MyData$x1+MyData$x2MyData$meanx-(MyData$x1+MyData$x2)/2#方法2attach(MyData)MyData$sumx-x1+x2MyData$meanx-(x1+x2)/2detach(MyData)#方法3(建议方法)MyData-transform(MyData,sumx=x1+x2,meanx=(x1+x2)/2)二、变量的重命名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三、变量的重新编码例如,数据集Leader中连续型变量age重新编码为分类型变量rankAge(Young、MiddleAged、Elder)。首先,必须把99岁的年龄值重新编码为缺失值:Leader$age[Leader$age==99]-NA然后创建rankAge变量:Leader$rankAge[Leader$age75]-ElderLeader$rankAge[Leader$age=50&Leader$age=75]-MiddleAgedLeader$rankAge[Leader$age50]-Young或者Leader-within(Leader,{rankAge-NArankAge[age75]-ElderrankAge[age=50&age=75]-MiddleAgedrankAge[age50]-Young})四、数据排序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注:数据框转置(行列交换),使用t(data)即可。五、数据合并1.使用函数rbind(),增加行(样本数据),要求宽度(列数)相同;cbind(),增加列(属性变量),要求高度(行数)相同(见第04篇)2.使用函数merge()用来合并两个数据框,按行名或变量名匹配。基本格式为:merge(x,y,by=…,by.x=…,by.y=…,all=…,all.x=…,all.y=…,...)其中,x,y为要合并的数据集;by指定合并的依据(相同的行或列),默认按相同的列连接;by.x,by.y分别为第一、二个数据框指定连接的列;all,all.x,all.y默认为FALSE,仅输出x和y中都包含的行(内连接);all.x为TURE,则为左外连接;all.y为TURE,则为右外连接;all=TRUE,则为全连接仅返回两个表匹配的数据左外连接:返回左表的数据,以及匹配的数据右外连接:返回右表的数据,以及匹配的数据全连接:返回左右表的数据,以及匹配的数据例1setwd(E:/办公资料/R语言/R语言学习系列/codes)load(salary.Rdata)index-list(City=data$City,Index=1:15)data1-merge(data,index,by=City)head(data1)CityWorkPriceSalaryIndex1Amsterdam171465.649.012Bombay205230.35.323Chicago192473.961.934Dublin175976.041.445Frankfurt165074.560.456London173784.246.26例2authors-data.frame(surname=I(c(Tukey,Venables,Tierney,Ripley,McNeil)),nationality=c(US,Australia,US,UK,Australia),deceased=c(yes,rep(no,4)))authorssurnamenationalitydeceased1TukeyUSyes2VenablesAustraliano3TierneyUSno4RipleyUKno5McNeilAustralianobooks-data.frame(name=I(c(Tukey,Venables,Tierney,Ripley,Ripley,McNeil,RCore)),title=c(ExploratoryDataAnalysis,ModernAppliedStatistics...,LISP-STAT,SpatialStatistics,StochasticSimulation,InteractiveDataAnalysis,AnIntroductiontoR),other.author=c(NA,Ripley,NA,NA,NA,NA,Venables&Smith))booksnametitleother.author1TukeyExploratoryDataAnalysisNA2VenablesModernAppliedStatistics...Ripley3TierneyLISP-STATNA4RipleySpatialStatisticsNA5RipleyStochasticSimulationNA6McNeilInteractiveDataAnalysisNA7RCoreAnIntroductiontoRVenables&Smithm1-merge(authors,books,by.x=surname,by.y=name)#内连接m1surnamenationalitydeceasedtitleother.author1McNeilAustralianoInteractiveDataAnalysisNA2RipleyUKnoSpatialStatisticsNA3RipleyUKnoStochasticSimulationNA4TierneyUSnoLISP-STATNA5TukeyUSyesExploratoryDataAnalysisNA6VenablesAustralianoModernAppliedStatistics...Ripleym2-merge(authors,books,by.x=surname,by.y=name,all.x=TRUE)#左外连接m2surnamenationalitydeceasedtitleother.author1McNeilAustralianoInteractiveDataAnalysisNA2R
本文标题:R语言学习系列17-数据整合Ⅰ—基本操作
链接地址:https://www.777doc.com/doc-2856402 .html