R语言基础培训第一讲 R语言入门.ppt
R语言入门语言入门2什么是R?R是一种统计绘图语言,也指实现该语言的软件。The R Project for Statistical Computing 3为什么要学会R?SPSS(Statistical Package for the Social Sciences)的发明者诺曼奈伊(Norman Nie)说:“没有什么统计概念是R不能表现的。5R简 史史R语言是从语言是从S统计绘图语言演变而来,可看作统计绘图语言演变而来,可看作S的的方言方言。S语言上世纪语言上世纪70年代诞生于贝尔实验室,由约翰年代诞生于贝尔实验室,由约翰钱伯斯(钱伯斯(JohnChambers)开发。)开发。基于基于S语言开发的商业软件语言开发的商业软件Splus,可以方便的编写函数、建立模型,可以方便的编写函数、建立模型,具有良好的扩展性,在国外学术界应用很广,对具有良好的扩展性,在国外学术界应用很广,对SPSS和和SAS有力冲击。有力冲击。1995年由新西兰年由新西兰Auckland大学统计系的罗斯大学统计系的罗斯艾卡(艾卡(RossIhaka)和罗)和罗伯特伯特简特曼(简特曼(RobertGentleman),基于),基于S语言的源代码,编写了一能语言的源代码,编写了一能执行执行S语言的软件,并将该软件的源代码全部公开,这就是语言的软件,并将该软件的源代码全部公开,这就是R软件,其命软件,其命令统称为令统称为R语言。语言。R的起源的起源RobertGentlemanRossIhaka自自1997年以后,有一个核心团队,这一团队能对年以后,有一个核心团队,这一团队能对R的源代码进行修改。的源代码进行修改。7R的优点的优点多领域的统计资源多领域的统计资源目前在目前在R网站上约有网站上约有8230个程序包,涵盖了基础统计学、社会学、个程序包,涵盖了基础统计学、社会学、经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。免费开源免费开源统计分析能力突出统计分析能力突出作图功能强大作图功能强大拓展与开发能力强拓展与开发能力强8R的缺点的缺点用户需要对命令熟悉 与代码打交道,需要记住常用命令。帮助系统均为英文占用内存 所有的数据处理在内存中进行,不适于处理超大规模的数据。运行速度稍慢 即时编译,约相当于C语言的1/20。如何学如何学习R?熟悉语法熟悉语法训练思维训练思维善于求助善于求助熟能生巧熟能生巧保持兴趣保持兴趣10R软件首页 http:/www.r-project.org/11Windows下下载和安装和安装R下载完成后,双击下载完成后,双击R-3.2.4-win.exe开始安装。开始安装。一直点击下一步,各选项默认,语言建议选英文。一直点击下一步,各选项默认,语言建议选英文。12图 4 R登陆界面(Windows版)路径:开始所有程序R 3.2.4菜菜单栏快捷按快捷按钮控制台控制台光光标:等待等待输入入13R图形界面:图形界面:RstudioRstudio是是R的图形界面之一,可以让的图形界面之一,可以让R语言代码更直观、明了地运语言代码更直观、明了地运行。行。RStudio同样同样是是免费免费和和开源开源的的,可以在网站上自由下载与使,可以在网站上自由下载与使用(用(http:/ 菜单安装菜单安装在联网的条件下,按菜单栏在联网的条件下,按菜单栏【程序包程序包】下拉选择下拉选择【安装程序包安装程序包】,选,选择所需的程序包进行实时安装;择所需的程序包进行实时安装;2 联网命令安装联网命令安装例如:例如:要安装要安装vegan包包,在控制台中输入在控制台中输入 install.packages(vegan)3 本地安装本地安装路径:路径:Packagesinstall packages from local files选择本地磁盘上存储选择本地磁盘上存储zip包的文件夹。包的文件夹。4 脚本安装脚本安装在联网的条件下,请运行在联网的条件下,请运行Rpackages.install.R程序,即可完成本培程序,即可完成本培训所需的程序包安装。训所需的程序包安装。22程序包使用与更新程序包使用与更新程序包的中函数,都要先导入,再使用,因此导入程序包是第一步。程序包的中函数,都要先导入,再使用,因此导入程序包是第一步。在控制台中输入如下命令:在控制台中输入如下命令:library(lattice)library(ggplot2)所有程序包的更新所有程序包的更新update.packages()注意:注意:R 命令对大小写敏感,因此使用命令方式安装和载入程序包时命令对大小写敏感,因此使用命令方式安装和载入程序包时应特别注意。应特别注意。23查看程序包帮助文件看程序包帮助文件vegan程序包内部都有哪些函数?分别有什么功能?程序包内部都有哪些函数?分别有什么功能?查询程序包内容最常用的方法:查询程序包内容最常用的方法:1菜单菜单帮助帮助Html帮助帮助2查看查看pdf帮助文档帮助文档24查看函数的帮助文件看函数的帮助文件函数的默认值是什么?函数的默认值是什么?怎么使用?怎么使用?使用时需要注意什么问使用时需要注意什么问题?题?需要查询函数的帮助。需要查询函数的帮助。1?t.test 2 RGuiHelpHtml help3 apropos(t.test)4 help(t.test)5 help.search(t.test)6 查看查看R包包pdf手册手册2526帮助文件的内容帮助文件的内容t.teststats#函数名及所在包函数名及所在包 Fitting Linear Models#标题标题Description#函数描述函数描述Usage#默认选项默认选项Arguments#参数参数Details#详情详情Author(s)#作者作者References#参考文献参考文献Examples#举例举例27练习一一安装安装R并并导入程序包入程序包1.安装安装R和和Rstudio软件、熟悉菜单软件、熟悉菜单2.本地安装程序包本地安装程序包:vegan3.调用程序包,查看程序包的帮助调用程序包,查看程序包的帮助library(vegan)查找查找vegan包中包中cca函数的帮助函数的帮助输入输入?cca(试试(试试?cca)将其中的将其中的Example粘贴到控制台中,查看运行的结果。粘贴到控制台中,查看运行的结果。R数据集创建数据集创建数据创建数据创建向量,数组,矩阵,数据框,列表,因子向量,数组,矩阵,数据框,列表,因子数据输入数据输入scan(),csv文件,文件,excel文件,文件,sas数据数据数据存储数据存储write.table(),write.csv(),save()向量向量vector概念:用于存储数值型、字符型或逻辑型数据的概念:用于存储数值型、字符型或逻辑型数据的一维数组。一维数组。例子:例子:a-c(1,2,5,3,6,-2,4)#数值型向量数值型向量b-c(one,two,three)#字符型向量字符型向量crep(2:5,2)#等价于等价于rep(2:5,times=2)123452345rep(2:5,rep(2,4)122334455rep(1:3,times=4,each=2)1112233112233112233112233paste(c(X,Y),1:10,sep=-)#不规则不规则1X-1Y-2X-3Y-4X-5Y-6X-7Y-8X-9Y-10rep(factor(LETTERS1:3),5)1ABCABCABCABCABCLevels:ABC向量中元素的访问向量中元素的访问aa315#向量向量a中第一、三、五个数据中第一、三、五个数据ac(1,3,5)1156#向量向量a中第二到第六个数据中第二到第六个数据a2:612536-2#向量向量a中数值大于中数值大于3的所有数据的所有数据aa31564#去掉第一个值去掉第一个值a-112536-24#去掉前三个值去掉前三个值a-1:-3136-24矩阵矩阵matrix概念概念:一个二维数组一个二维数组#创建一个创建一个22的矩阵的矩阵matrix(1:4,nrow=2,ncol=2),1,21,132,24#生成单位阵生成单位阵diag(3),1,2,31,1002,0103,001mat1-matrix(1:12,3,4,byrow=T)mat2xx2,2#第二行、第第二行、第2列的元素列的元素14x2,#第二行的所有元素第二行的所有元素1246x,2#第第2列的所有元素列的所有元素134x2,c(2,3)#第二行中第第二行中第2、3列的元素列的元素146数据框数据框dataframe使用函数使用函数data.frame()创建:创建:mydatapatientIDagediabetesstatuspatientdatapatientdata1:2#第第1、2列的所有元素列的所有元素patientdata$age#$符合用于选取一个指定的变量。符合用于选取一个指定的变量。列表列表listR数据类型中最为复杂的一种数据结构。数据类型中最为复杂的一种数据结构。列表就是包含任何类型的对象,可以是若干向量、矩阵、数据框,甚列表就是包含任何类型的对象,可以是若干向量、矩阵、数据框,甚至其他列表的组合。至其他列表的组合。通过函数通过函数list()来创建:来创建:mylistghjkmylistprovincepfpf1四川四川湖南湖南江苏江苏四川四川四川四川四川四川湖南湖南江苏江苏湖南湖南江苏江苏Levels:湖南湖南江苏江苏四川四川数据的输入数据的输入1键盘输入键盘输入mydata-data.frame(age=numeric(0),gender=character(0),weight=numeric(0)mydata-edit(mydata)#输入或修改输入或修改mydata中的数据中的数据2使用使用scan()函数函数mydata-scan(file=ex.data,what=list(,0,0)#将压缩型数据读入一个向量或列表将压缩型数据读入一个向量或列表3导入导入csv文件文件mydata2-read.table(file=D:/dbh.csv,header=T,sep=,)mydata3-read.csv(file=D:/dbh.csv,header=T)4网络中读取表格或网络中读取表格或csv文件文件tbl-read.csv(http:/ 导入导入Excel数据数据library(RODBC)channel-odbcConnectExcel(d:/test.xls)mydata-sqlFetch(channel,Sheet1)channel2-odbcConnectExcel2007(d:/test.xlsx)mydata2-sqlFetch(channel,Sheet1)6导入导入SAS数据数据library(foreign)mydata-read.sas(d:/test.ssd)library(Hmisc)data-sas.get(D:/test.ssd)7导入导入SPSS数据数据library(foreign)mydatadfwrite.table(df,file=D:/Rdata/fg.txt,row.names=F,quote=F)#row.names=F:不写入行名,不写入行名,quote=F:变量名不用双引号。变量名不用双引号。(2)保存为保存为csv文件文件write.csv(df,file=D:/Rdata/fg.csv)(3)保存为保存为R格式文件格式文件save(df,file=D:/Rdata/fg.Rdata)R数据操作数据操作变量创建与删除变量创建与删除变量重命名变量重命名缺失值缺失值数据类型转化数据类型转化数据排序数据排序数据合并数据合并数据子集提取数据子集提取数据重构数据重构常用函数常用函数数据探索数据探索常见循环常见循环自编函数自编函数变量创建与删除变量创建与删除mydata-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8)#方法一方法一mydata$sum-mydata$x1+mydata$x2mydata$mean-(mydata$x1+mydata$x2)/2#方法二方法二mydata-transform(mydata,sum=x1+x2,mean=(x1+x2)/2)#变量删除变量删除mydata$mean-NULL 变量的重命名变量的重命名df-mydata第一种方法:调用编辑器重命名第一种方法:调用编辑器重命名fix(df)第二种方法:使用函数第二种方法:使用函数 names()重命名重命名names(df)names(df)1:3-c(A,B,C)缺失值的处理缺失值的处理缺失值:缺失值:NA(Not Available,不可用,不可用)不可能出现的值:不可能出现的值:NaN(Not a Number,非数值,非数值)函数函数 is.na()可检测缺失值是否存在。可检测缺失值是否存在。例子例子x-c(1:3,5,7,NA,9)sum(x)#结果为结果为 NAsum(x,na.rm=T)#结果为结果为 27数据类型的转换数据类型的转换数据转换例子数据转换例子Rep-c(1:6)#Rep 赋值赋值is.numeric(Rep)#数值型判断:真数值型判断:真is.factor(Rep)#因子判断:假因子判断:假Rep-as.factor(Rep)#转换为因子转换为因子is.factor(Rep)#因子判断:真因子判断:真数据的排序数据的排序R 自带的自带的 order()函数函数plyr 程序包的程序包的 arrange()函数函数#按按 x1,x2先后依次排序先后依次排序#R 自带的自带的 order()排序排序df order(-df$x1,df$x2),#plyr 程序包的程序包的 arrange()函数排序函数排序library(plyr)arrange(df,-x1,x2)排序例子排序例子#创建数据框创建数据框df-data.frame(id=1:4,weight=c(20,27,24,22),size=c(small,large,medium,large)#id weight size#1 20 small#2 27 large#3 24 medium#4 22 large#R 自带的自带的 order()函数函数dforder(df$weight),dforder(df$size,df$weight),dforder(df$size,-df$weight),#plyr 包的包的 arrange()函数函数library(plyr)arrange(df,weight)arrange(df,size,weight)arrange(df,size,-weight)排序例子排序例子(非同一数据框)非同一数据框)有两列数据在一个数据框有两列数据在一个数据框dataAB1小明小明2小王小王3小李小李4小张小张现输入一列数现输入一列数gg2143要求显示出要求显示出AB2小王小王1小明小明4小张小张3小李小李答案:答案:dataorder(gg),数据集的合并数据集的合并列合并列合并#共有变量共有变量:IDtotal-merge(dataA,dataB,by=ID)#解释见代码解释见代码#共有变量共有变量:ID、Countrytotal-merge(dataA,dataB,by=c(ID,Country)#含有一样的行数,而且以相同顺序排序。含有一样的行数,而且以相同顺序排序。total-cbind(dataA,dataB)列合并例子列合并例子#创建数据框创建数据框 dataAdataA-read.table(header=T,text=storyid title1 lions2 tigers3 bears)#创建数据框创建数据框 dataBdataB-read.table(header=T,text=subject storyid rating1 1 6.71 2 4.52 2 3.32 1 5.2)#合并数据框合并数据框 dataA,dataBmerge(dataA,dataB,storyid)#将将 dataA 的的 stroyid 重命名为重命名为 idcolnames(dataA)1-c(Id)merge(x=dataA,y=dataB,by.x=id,by.y=storyid)现在有某一地区的植物名录表格现在有某一地区的植物名录表格gao.csv,表格内只有两列,表格内只有两列,分别为分别为中文名中文名和和name,现在有中国现在有中国IUCN植物红色名植物红色名录数据库表格录数据库表格chinaIUCN.csv(表格内只有两列,分别为濒(表格内只有两列,分别为濒危等级危等级level和和species)。我们需要通过匹配两个表格获。我们需要通过匹配两个表格获得该地区植物的得该地区植物的IUCN评估等级表。评估等级表。aa-read.csv(chinaIUCN.csv)sp-read.csv(gao.csv)bb-merge(aa,sp,by.x=species,by.y=name,all.y=T)head(bb)write.csv(bb,gaoIUCN.csv)列合并的案例分析列合并的案例分析行合并行合并total-rbind(dataA,dataB)注意:注意:dataA 与与 dataB 需含有一样的变量,需含有一样的变量,但排列的顺序可以不同。但排列的顺序可以不同。行合并例子行合并例子dfA-data.frame(Subject=c(1,1,2,2),Response=c(X,X,X,X)dfB-data.frame(Subject=c(1,2,3),Response=c(Z,Y,Z)df-rbind(dfA,dfB)dfA$Coder-AdfB$Coder-Bdf-rbind(dfA,dfB)数据子集的提取数据子集的提取3.7.1 根据位置选取子集根据位置选取子集使用方法如下:使用方法如下:dfm1,表示返回第表示返回第 m1 行的数据行的数据dfc(m1,m2,.,mj),表示返回由第表示返回由第 m1,m2,.mj 行组成的数据框行组成的数据框df,n1 表示返回第表示返回第 n1 列的数据列的数据df,c(n1,n2,.,nk)表示返回由第表示返回由第 n1,n2,.nk 列组成的数据框列组成的数据框例子例子#创建数据框创建数据框df-read.table(header=T,text=subject sex size1 M 72 F 63 F 94 M 11)#以行取子集以行取子集df1,dfc(1,3),#以列取子集以列取子集df,1df,c(1,3)#以行列组合取子集以行列组合取子集dfc(1,3),c(1,3)根据列名选取子集根据列名选取子集使用方法如下:使用方法如下:df,name1 表示返回列名为表示返回列名为 name1 的数据的数据df,c(name1,name2,.,namek)表示返回由多个列组成的数据框表示返回由多个列组成的数据框df,size#返回向量返回向量df size#返回数据框返回数据框df,c(size,sex)使用使用subset()函数函数subset(df,select=c(name1,name2,.,namek)表示返回由多个列组成的数据框表示返回由多个列组成的数据框subset(df,select=subject)subset(df,subject 3)subset(df,subject 3,select=-subject)subset(df,subject 20、Grade3的所有数据;的所有数据;计算计算weight的平均值,找出的平均值,找出height最大值。最大值。练习二练习二练习二练习二答案答案stu.df-read.csv(file=stu.data.csv,header=T)stu.df$armlegL-stu.df$arml+stu.df$leglstu.df$armlegLc(2,5,7,10)-NAstu.df$armlegL-NULLis.numeric(stu.df$Grade);summary(stu.df$Grade)stu.df$Grade-as.factor(stu.df$Grade);summary(stu.df$Grade)library(plyr)arrange(stu.df,age,-weight)df1A-stu.df1:20,;df1B-stu.df-1:-20,df1-rbind(df1A,df1B)df2A-stu.df,1:6;df2B-stu.df,-2:-6df2-merge(df2A,df2B,by=ID)df320&Grade3)mean(stu.df$weight);max(stu.df$height)