R语言基础培训第一讲-R语言入门ppt课件.ppt
2什么是R?R是一种统计绘图语言,也指实现该语言的软件。The R Project for Statistical Computing 3为什么要学会R?SPSS(Statistical Package for the Social Sciences)的发明者诺曼奈伊(Norman Nie)说: “没有什么统计概念是R不能表现的。5R R简简 史史 R语言是从语言是从S统计绘图语言演变而来,可看作统计绘图语言演变而来,可看作S的的方言方言。 S语言上世纪语言上世纪70年代诞生于贝尔实验室,由约翰年代诞生于贝尔实验室,由约翰钱伯斯(钱伯斯(John Chambers)开发。)开发。 基于基于S语言开发的商业软件语言开发的商业软件Splus,可以方便的编写函数、建立模型,可以方便的编写函数、建立模型,具有良好的扩展性,在国外学术界应用很广,对具有良好的扩展性,在国外学术界应用很广,对SPSS 和和 SAS 有力冲击。有力冲击。 1995年由新西兰年由新西兰Auckland大学统计系的罗斯大学统计系的罗斯艾卡(艾卡(Ross Ihaka)和)和罗伯特罗伯特简特曼(简特曼(Robert Gentleman),基于),基于S语言的源代码,编写了一语言的源代码,编写了一能执行能执行S语言的软件,并将该软件的源代码全部公开,这就是语言的软件,并将该软件的源代码全部公开,这就是R软件,其软件,其命令统称为命令统称为R语言。语言。R 的起源的起源Robert GentlemanRoss Ihaka自自1997年以后,有一个核心团队,这一团队能对年以后,有一个核心团队,这一团队能对 R 的源代码进行修改。的源代码进行修改。7多领域的统计资源多领域的统计资源 目前在目前在R网站上约有网站上约有8230个程序包,涵盖了基础统计学、社会学、个程序包,涵盖了基础统计学、社会学、经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。经济学、生态学、空间分析、系统发育分析、生物信息学等诸多方面。免费开源免费开源统计分析能力突出统计分析能力突出作图功能强大作图功能强大拓展与开发能力强拓展与开发能力强8 用户需要对命令熟悉 与代码打交道,需要记住常用命令。 帮助系统均为英文 占用内存 所有的数据处理在内存中进行,不适于处理超大规模的数据。 运行速度稍慢 即时编译,约相当于C语言的1/20。如何学习如何学习R?R? 熟悉语法熟悉语法 训练思维训练思维 善于求助善于求助 熟能生巧熟能生巧 保持兴趣保持兴趣10R软件首页 http:/www.r-project.org/ 11WindowsWindows下载和安装下载和安装R R下载完成后,双击下载完成后,双击R-3.2.4-win.exe 开始安装。开始安装。一直点击下一步,各选项默认,语言建议选英文。一直点击下一步,各选项默认,语言建议选英文。12图 4 R登陆界面(Windows版)路径: 开始所有程序R 3.2.4菜单栏菜单栏快捷按钮快捷按钮控制台控制台光标光标:等待输入等待输入13R图形界面:图形界面:RstudioRstudio是是R的图形界面之一,可以让的图形界面之一,可以让 R 语言代码更直观、明了地运语言代码更直观、明了地运行。行。 RStudio 同样同样 是是 免费免费 和和 开源开源 的的 ,可以在网站上自由下载与使,可以在网站上自由下载与使用(用(http:/ 开始安装。开始安装。RStudio 有以下几大优点:有以下几大优点: 代码字体高亮,代码完整性智能识别、自动缩进;代码字体高亮,代码完整性智能识别、自动缩进; 可直接执行可直接执行 R 程序代码;程序代码; 可运行多个可运行多个 R 程序;程序; 可直接浏览工作表和数据;可直接浏览工作表和数据; 可随意缩放绘制的图形,并且有多种输出格式;可随意缩放绘制的图形,并且有多种输出格式; 整合整合 R 帮助和帮助和 R 使用文档;使用文档; 可查看可查看 R 命令的运行记录。命令的运行记录。1517R R程序包(程序包(R PackagesR Packages)程序包是什么?程序包是什么? R程序包是多个函数的集合,具有详细的说明和示例。程序包是多个函数的集合,具有详细的说明和示例。 Window下的下的R程序包是经过编译的程序包是经过编译的zip包。包。每个程序包包含每个程序包包含R函数、数据、帮助文件、描述文件等。函数、数据、帮助文件、描述文件等。为什么要安装程序包?为什么要安装程序包? R程序包是程序包是R功能扩展,特定的分析功能,需要用相应的程序包实现。功能扩展,特定的分析功能,需要用相应的程序包实现。 例如:系统发育分析,常用到例如:系统发育分析,常用到ape程序包,群落生态学程序包,群落生态学vegan包等。包等。18install.views(Environmetrics)19三种平台上的三种平台上的程序包程序包20R R程序包程序包在在CRAN 提供了每个包的源代码和编译好的程序包提供了每个包的源代码和编译好的程序包以以vegan包为例,包为例,CRAN提供了:提供了:Package source: vegan_1.17-2.tar.gz MacOS X binary: vegan_1.17-2.tgz Windows binary: vegan_1.17-2.zip Reference manual: vegan.pdf Window下程序包为下程序包为zip文件,安装时不要解压缩。文件,安装时不要解压缩。211 菜单安装菜单安装在联网的条件下,按菜单栏在联网的条件下,按菜单栏【程序包程序包】下拉选择下拉选择【安装程序包安装程序包】 ,选,选择所需的程序包进行实时安装;择所需的程序包进行实时安装;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 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) # 字符型向量字符型向量 c rep(2:5, 2) # 等价于等价于 rep(2:5, times = 2) 1 2 3 4 5 2 3 4 5 rep(2:5, rep(2, 4) 1 2 2 3 3 4 4 5 5 rep(1:3, times = 4, each = 2) 1 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 paste(c(X,Y), 1:10, sep = -) #不规则不规则1 X-1 Y-2 X-3 Y-4 X-5 Y-6 X-7 Y-8 X-9 Y-10 rep(factor(LETTERS1:3), 5) 1 A B C A B C A B C A B C A B C Levels: A B C 向量中元素的访问向量中元素的访问a a3 1 5 # 向量向量 a 中第一、三、五个数据中第一、三、五个数据 ac(1, 3, 5) 1 1 5 6 # 向量向量 a 中第二到第六个数据中第二到第六个数据 a2:6 1 2 5 3 6 -2 # 向量向量 a 中数值大于中数值大于 3 的所有数据的所有数据 aa3 1 5 6 4 # 去掉第一个值去掉第一个值 a-1 1 2 5 3 6 -2 4 # 去掉前三个值去掉前三个值 a-1:-31 3 6 -2 4 矩阵矩阵matrix概念概念:一个二维数组一个二维数组#创建一个创建一个 22 的矩阵的矩阵 matrix(1:4, nrow = 2, ncol = 2) ,1 ,2 1, 1 3 2, 2 4 # 生成单位阵生成单位阵 diag(3) ,1 ,2 ,3 1, 1 0 0 2, 0 1 0 3, 0 0 1mat1-matrix(1:12,3,4, byrow=T)mat2 x x2,2 # 第二行、第第二行、第 2 列的元素列的元素 1 4 x2, # 第二行的所有元素第二行的所有元素 1 2 4 6 x ,2 # 第第 2 列的所有元素列的所有元素 1 3 4 x2, c(2, 3) # 第二行中第第二行中第 2、3 列的元素列的元素 1 4 6 数据框数据框data frame使用函数使用函数 data.frame( )创建:创建: mydata patientID age diabetes status patientdata patientdata1:2 # 第第 1、2 列的所有元素列的所有元素 patientdata$age # $符合用于选取一个指定的变量。符合用于选取一个指定的变量。 列表列表list R 数据类型中最为复杂的一种数据结构。数据类型中最为复杂的一种数据结构。列表就是包含任何类型的对象,可以是若干向量、矩阵、数据框,甚列表就是包含任何类型的对象,可以是若干向量、矩阵、数据框,甚至其他列表的组合。至其他列表的组合。通过函数通过函数 list( )来创建:来创建: mylist g h j k mylist province pf pf 1 四川四川 湖南湖南 江苏江苏 四川四川 四川四川 四川四川 湖南湖南 江苏江苏 湖南湖南 江苏江苏 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)mydata df write.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)排序例子排序例子(非同一数据框)非同一数据框)有两列数据在一个数据框有两列数据在一个数据框dataA B1 小明小明2 小王小王3 小李小李4 小张小张现输入一列数现输入一列数gg2143要求显示出要求显示出A B2 小王小王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)