版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、R语言简介R语言是用于统计分析,图形表示报告的编程语言和软件环境。R语言最早是由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman创建的,目前由R Development Core Team开发和维护。R是一套由数据操作、计算和图形展示功能整合而成的套件。包括:有效的数据存储和处理功能,一套完整的数组(特别是矩阵)计算操作符,拥有完整体系的数据分析工具,为数据分析和显示提供的强大图形功能 R语言的特点1简单有效2功能强大3软件容易扩展4强大的社区支持R语言是一个开源的语言,可以在互联网上下载安装使用。打开R语言官网(/bin/windows/base/)页面界面就是R语言
2、的最主要交互界面,也是运行、调试大部分代码的地方,这里要注意的是,界面中每行最开始的符号表示在此输入代码,输入代码之后,然后按Enter键执行代码,代码运行后,结果将会在代码的下一行中显示出来。直接运行代码 该例代码如下: print(Hello World)在R中print()函数将指定字符串输出到控制台,并在执行函数后,以“数字”形式显示运行结果。当显示结果有多行时,“数字”会指明各返回值是第几个。通过程序脚本来运行 在R中查看帮助此外,用户也可以在“”后输入命令来查看帮助。在R中,在?后输入待查的命令,或者以“help(命令)”形式输入,都可以查看对应命令的帮助。在控制台中输入命令exa
3、mple(persp),即可自动运行R中的三维图像绘制函数perspR语言的包R是开源的软件工具,很多R语言用户和爱好者都会扩展R的功能模块,我们把这些模块称为包。包是R函数、数据、预编译代码以一种定义完善的格式组成的集合,而在计算机上存储包的目录称为库(library)。在R中拥有数量巨大的包,这些包横跨各个领域。值得注意的是:R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它们提供了种类繁多的默认函数和数据集,人们无需下载即可使用。 .libPaths()1 D:/Program Files/R/R-4
4、.0.2/library search()1 .GlobalEnv package:stats package:graphics 4 package:grDevices package:utils package:datasets 7 package:methods Autoloads package:base 在R语言中有许多R函数可以用来管理包。第一次安装一个包,使用命令install.packages()即可。在R语言中包的安装是指从某个CRAN镜像站点下载它并将其放入库中的过程。要在R会话中使用它,还需要使用library()命令载入这个包。数据类型与数据对象R语言中的数据对象十分丰富
5、,本章主要讲述R语言中的各种数据对象定义及使用的基本方法。数据类型在每种编程语言和不同的数据库中都有不同的数据类型。通常可以根据数据类型的特点将数据划分为不同的类型,如原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型等。在R中输出基本的数据类型 n print(class(n)1 numeric a print(class(a)1 logical b print(class(b)1 character j print(class(j)1 complex在R中查看数据的属性。 j print(class(j)1 complex print(cat(j)3+2iNULL
6、 变量与标量变量是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以保存程序运行时用户输入的数据、特定运算的结果以及要在窗体上显示的一段数据等。在R语言中有效的变量名称由字母,数字和点或下划线字符组成。 变量名以字母或不以数字后跟的点开头,并且紧随其后的字符是不能是数字。如a、welcome、a1、x2、.x 都是合法的命名。在R中对变量赋值。 x y x1 1 y1 2在R中对变量赋值,并输出最大值。 max(x x1 1 2 3 4 5标量R基本数据类型是向量,而标量是指长度为1的向量,即长度为1的数组。因此标量只是向量的一种特例,并且以单元素向量的形式出现。使用函数print()输
7、出数值。 a b c print(c)1 3在R中输出字符串。 a print(a)1 Hello World typeof(a)1 character在R中输出逻辑类型 a b typeof(a)1 logical typeof(b)1 logical在R中输出逻辑运算。 TRUE&TRUE1 TRUE TRUE&FALSE1 FALSE TRUE|TRUE1 TRUE TRUE|FALSE1 TRUE !TRUE1 FALSE在R中判断是否空值。 is.na(x)1 TRUE y is.na(y)1 FALSE R语言中的数据对象R的数据对象从结构角度来看包括向量、矩阵、数组、列表、因子、
8、数据框 向量向量是用于存储数值型、字符型或逻辑型数据的一维数组。在R中的向量类似于其他编程语言中常见的数组,只用于保存具有相同数据类型的数据。在R中创建向量。 x print(x)1 1 2 3 4 5 y print(y) 1 1 2 3 4 5 6 7 8 9 10 z print(z)NULL w print(w)在R中用seq()来创建向量。 s1 print(s1)1 1 3 5 7 9在R中用names x names(x) x owen alex messi 1 2 3在R中访问向量元素。 x x11 a x21 b x31 c在R中获取向量中的多个元素。 x xc(1,2)1
9、a b xc(1,3)1 a c在R中对向量进行常见运算。 x sum(x)1 45 max(x)1 9 min(x)1 1 mean(x)1 5 length(x)1 9 var(x)1 7.5 sd(x)1 2.738613 median(x)1 5 quantile(x) 0% 25% 50% 75% 100% 1 3 5 7 9 sort(x)1 1 2 3 4 5 6 7 8 9 rev(x)1 9 8 7 6 5 4 3 2 1矩阵在R语言中,矩阵(matrix)是将数据按行和列组织数据的一种数据对象,相当于二维数组,可以用于描述二维的数据。与向量相似,矩阵的每个元素都拥有相同的数
10、据类型。在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下:matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)参数含义如下:data:矩阵的元素,默认为NA,即未给出元素值的话,各项为NA;nrow:矩阵的行数,默认为1;ncol:矩阵的列数,默认为1;byrow:元素是否按行填充,默认按列;dimnames:以字符型向量表示的行名及列名。在R中创建矩阵。 matrix(c(1,2,3,4,5,6,7,8,9),nrow=3) ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9在R中
11、创建矩阵并命名。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 dimnames(x) x b1 b2 b3a1 1 4 7a2 2 5 8a3 3 6 9在R中创建矩阵,并访问矩阵。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 x1,11 1 x1,21 4 x2,11 2 x2,31 8在R语言中,矩阵可与标量或是其他矩阵进行运算。如定义某矩阵为A,某标量为a,则A+x表示将矩阵的所有值与标量相加。如定义某矩阵为A,另一矩阵为B,则A+B表示求矩阵A+B的和。如定义某矩阵为A,则使用函数t()可求出该矩阵的转置矩阵。如定义某矩阵为A
12、,则使用函数solve()可求出该矩阵的逆矩阵。如定义某矩阵为A,则使用函数nrow()可求出该矩阵的行数,使用函数ncol()可求出该矩阵的列数。在R中创建矩阵,并进行矩阵的加减乘除运算。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 x+3 ,1 ,2 ,31, 4 7 102, 5 8 113, 6 9 12 x-3 ,1 ,2 ,31, -2 1 42, -1 2 53, 0 3 6 x*3 ,1 ,2 ,31, 3 12 212, 6 15 243, 9 18 27 x/3 ,1 ,2 ,31, 0.3333333 1.333333 2.3333332,
13、0.6666667 1.666667 2.6666673, 1.0000000 2.000000 3.000000数组在R语言中,可以认为数组是矩阵的扩展,它将矩阵扩展到2维以上。如果给定的数组是1维的则相当于向量,2维的相当于矩阵。在R语言中可以使用array()函数创建。array()函数的语法格式如下所示:array( data = NA,dim = length(data),dimnames = NULL)在R中创建数组。 arr1 arr1 1 1 2 3 4 5 6 7 8 9 10 arr2 arr2 ,1 ,2 ,3 ,41, 1 4 7 102, 2 5 8 13, 3 6
14、9 2在R中访问数组。 arr3 arr3, , 1 ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9, , 2 ,1 ,2 ,31, 10 3 62, 1 4 73, 2 5 8, , 3 ,1 ,2 ,31, 9 2 52, 10 3 63, 1 4 7, , 4 ,1 ,2 ,31, 8 1 42, 9 2 53, 10 3 6列表列表是R语言中的是对象的集合。R语言中的列表与R语言中的向量、数组和矩阵不同,它的每个分量的数据类型可以是不同的。在R语言中可以使用list()函数来创建列表,其语法格式为:list(name1=value1, name2 = value2,.
15、)在R中创建列表。 (x (x x1$name1 owen messi dandy x2$score1 89 68 71 x11 owen messi dandy x21 89 68 71因子因子在R语言中可以用来表示名义型变量或有序变量。名义变量一般表示类别,如性别,种族等等。在R语言中可以使用factor()函数来创建因子变量。factor()函数的语法格式为:f a a1 x y z xLevels: x y z在R中创建因子并访问因子。 a a1 x y z x wLevels: w x y z nlevels(a)1 4 levels(a)1 w x y z ordered(a)1
16、x y z x wLevels: w x y (d d d name sex score1 张宏 男 902 邓兰 女 853 刘涛 男 824 张峰 男 63 str(d)data.frame: 4 obs. of 3 variables: $ name : chr 张宏 邓兰 刘涛 张峰 $ sex : chr 男 女 男 男 $ score: num 90 85 82 63在R中对数据框进行查看。 s s x1 12 23 34 45 56 67 78 89 910 10 head(s) x1 12 23 34 45 56 6 tail(s) x5 56 67 78 89 910 10R
17、语言中数据类型的转换在R中判断数据类型。 class(c(1,2,3)1 numeric class(c(hello)1 character class(matrix(c(1,2,3)1 matrix array在R中判断数据类型并进行转换。 x is.character(x)1 TRUE as.factor(x)1 a b cLevels: a b c as.data.frame(x) x1 a2 b3 c as.matrix(x) ,11, a 2, b 3, c控制语句与函数现实世界中的很多事情,有时需要遵循一定的条件去执行,有时需要反复执行,只有满足相应的条件才能做相应的事情,不同的条
18、件会执行不同的操作。条件结构R语言和大多数程序语言一样都存在分支结构和循环结构两种流程控制结构,通过if 语句和switch语句可以实现分支结构控制语句。 条件表达式,也称逻辑表达式,它是一种能够计算出布尔值(布尔真值True或布尔假值False)的表达式。 6 = 71 FALSE FALSE = 01 TRUE FALSE & FALSE #取与运算,若运算符两边均为TRUE,则返回TRUE;否则,返回FALSE。1 FALSE eger(2.5)1 FALSE Truth %in% c(what,is,truth)1 FALSER语言中分支结构控制语句中最基本的语句组就是if - els
19、e语句组。这组语句包含if语句,if-else语句和if-else if-else 语句。单一if语句一般用在程序中只有一个分支的情况下,它的语法结构如下: if(条件表达式)程序体判断一个数是否为正数,如果为正数则输出语句这个数是正数x 0) print(x是正数) if-else语句的语法结构和if语句的语法结构的区别只在于,如果if的条件表达式的判定是假,则运行else中的程序体,它的语法结构是: if(条件表达式)程序体1else 程序体2当出现更多的分支时,R语言可以使用if-else if-else语句,这里else if的个数需要通过程序的分支个数来确定,它的语法结构是: if(
20、条件表达式)程序体1 else if(条件表达式2)程序体2else if(条件表达式n-1)程序体n-1 else 程序体nswitch语句R语言switch语句的基本语法如下: switch(表达式,实例1,实例2, )x switch(x, first, second, third, fourth)1 secondx print(x) 1 third循环结构在R语言中for循环的语法结构如下: for(循环变量 in 循环区间) 循环体使用for循环的使用,实现1至10的累加和。 sum for(n in 1:10) sum = sum +n print(sum)1 55while循环在
21、R语言中,while循环的语法结构和其他语言的while循环的语法结构相似,如下: while(条件表达式) 循环体while循环的语法结构比较简单,上例实现如下: sum i while( i = 10)sum = sum +ii print(sum)1 55break语句break语句的作用是,一旦其被调用,不论循环是否结束都会跳出循环,需要注意的是,和return( )函数不同,return( )函数是结束该函数,而break语句只会从循环中跳出使用break语句实现1至10之间整数的累加和,当大于等于10时跳出循环: sum i while( i =11) break;sum = su
22、m +ii print(sum)1 55repeat语句repeat是无限循环语句,并且会在达到循环条件后,使用break语句直接跳出循环,其语法结构如下: repeat 语句 if (条件表达式) break 函数R语言包含了丰富的内部函数,R语言的扩展包也包含了大量的可实用函数。R语言中如何自定义函数。自定义函数的格式如下: 函数名 sum-function(n) s-0 for (i in 1:n) s sum(100) 1 5050返回值在R语言中,函数的返回值可以返回任何R对象,尽管返回值通常为列表形式。在程序中可以通过显式调用return( )函数,把一个值返回给主调函数。函数的参
23、数在R语言中,函数的参数值可以没有,可以有一个,也可以有多个;参数值的类型可以是R语言的基本类型,也可以是函数。自定义一个函数实现三个数的相加,代码如下: sum sum(100, 200, 500) #虽然参数a, c都有默认值,此处对a,c重新赋值,b取值2001 2000 sum(100, 200) #参数c取默认值1 2000 sum(a=100, b=200) #通过赋值的方式给a,b赋值,参数c取默认值1 2000 sum(b=200, a=100) #通过赋值的方式给a,b赋值,可以不按顺序1 2000sum(100, 200, 300) #参数a,c不取默认值,重新赋值1 14
24、00程序的向量化实现在R语言中,采用显示循环会涉及多次函数的调用和迭代,常常很耗费时间。很多情况下循环和控制结构可以通过向量化来实现,可以有效提升速度将下列条件语句改用逻辑索引的向量化实现。 x y for (i in 1:length(x) if (xi = 2) yi - 0 else yi x y yx = 2 yx != 2 x x ,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 12 apply(x, 1, sum)1 15 18 21 24lapply( )函数lapply( )函数用来对列表、数据框等数据集进行循环,并返回和x长度同样的列表作为结
25、果数据集,参数与apply( )函数的参数相同计算list中的每个key对应的数据的分位数。代码如下: #构建一个1ist数据集x,分别包括a,b,c三个key值。 x lapply(x, quantile)$a 0% 25% 50% 75% 100% 1.00 3.25 5.50 7.75 10.00 $b 0% 25% 50% 75% 100% 0.04978707 0.25160736 1.00000000 5.05366896 20.08553692 $c 0% 25% 50% 75% 100% 0.0 0.0 0.5 1.0 1.0sapply( )函数sapply( )函数与lap
26、ply( )函数其实是一样的,只是返回的结果是一个向量或者是一个矩阵,当无法将一个结果简化为矩阵时,就会返回一个列表。sapply( )函数的语法格式如下: sapply(X,FUN,, simplify=TRUE, USE.NAMES=TRUE)sapply( )函数使用如下所示: x x$a1 1 2 3 4 5$b1 -0.55825260 -0.64523388 0.65826347 -0.02316176 1.07831357$c1 0.10549647 -0.01716549 1.67225328 0.26572079 0.89511642 sapply(x, mean) a b
27、c 3.0000000 0.1019858 0.5842843vapply()函数vapply函数就是sapply函数的升级版本,vapply函数通过付加一个参数来设定每次返回值的模板。与sapply()类似,vapply()也会对apply结果进行简化tapply()函数tapply()函数允许根据某些变量的值,把原始数据分割为若干组,然后对每一组数据应用特定的操作。mapply( )函数多参数版本的sapply()。第一次计算传入各组向量的第一个元素到FUN,进行结算得到结果;第二次传入各组向量的第二个元素,得到结果;第三次传入各组向量的第三个元素以此类推。rapply( )函数rappl
28、y( )函数是lapply( )函数的一个递归版本,它只负责处理列表(list)类型数据,对列表中的每个元素进行递归遍历,如果list包括子元素则继续遍历。数据的读写与预处理在真实的数据分析场景中,获取到的原始数据一般都存在有缺失值、重复值、异常值或格式等等问题,有必要对数据进行预处理,才能进行下一步的数据分析工作。R语言基本的输入输出功能主要包括三种形式: 键盘录入和屏幕输出、文本格式的输入输出、自有二进制格式的输入输出。工作目录是数据分析时输入输出的一个默认文件夹。在设置工作目录之前,还需要确保所要设置的文件夹是否存在。这可以利用函数dir.exists( )来判断文件夹是否存在,如不存在
29、,可以利用函数dir.create( )新建一个文件夹setwd(d:/R语言实训) #无法设置,可能是文件夹不存在Error in setwd(d:/R语言实训): cannot change working directorydir.exists(d:/R语言实训,)#判断文件夹是否存在1FALSEdir.create(d:/R语言实训)#不存在的话,可以新建一个setwd(d:/R语言实训) #设置工作目录getwd( ) #获取当前工作目录1d:/R语言实训向量的输入scan( )函数可以用于直接键盘录入,以构建一个向量,该函数也可以利用参数file直接读取文件中的向量,如: x=1:
30、8write(x, data.txt) #将一个数值向量保存在文件data.txt中scan(data.txt)#利用scan( )函数将这个数值向量写进来Read 8 items112345678数据文件的读取在数据分析中,数据经常采用数据表的形式进行存储和计算,即每列代表一个变量,每行代表一个个体或一条记录。矩阵和数据框从形式上看都是行列表,因此都能以数据表的形式进行输出,但写入数据表文件时,R语言会以数据框的形式写入。set.seed(1)x= matrix(rnorm(12), 3)write.csv(x, data.csv) #输出一个csv文件read.csv(data.csv)
31、X V1 V2 V3 V41 1 -0.6264538 1.5952808 0.4874291 -0.30538842 2 0.1836433 0.3295078 0.7383247 1.51178123 3 -0.8356286 -0.8204684 0.5757814 0.3898432如上所示,对于该文件,read.csv( )函数并不能自动识别行号,而将自动生成的行名作为一列写了进来。此时,可以利用参数s指定第一列为行名,如: read.csv(data.csv, s=1) V1 V2 V3 V41 -0.6264538 1.5952808 0.4874291 -0.30538842
32、0.1836433 0.3295078 0.7383247 1.51178123 -0.8356286 -0.8204684 0.5757814 0.3898432R语言中read.table( )函数为基础包自带函数,可以读取文本数据和csv格式数据使用read.table函数读取文件名为train.txt的文件 train library(readxl) read_excel(data.xlsx, sheet = 1)数据的输出在数据分析的过程中,当需要显示某个变量的值时,可以在命令提示符后直接键入变量的名称,但在循环结构中,必须使用函数对其进行屏幕输出。 for(i in 1:2) i#
33、在循环结构中,仅使用变量名无法输出变量的内容 for(i in 1:2) print(i) #可以使用print( )函数指定输出i的值1 11 2 for(i in 1:2) cat(i) #也可以使用cat( )函数指定输出1的值12向量的输出R语言可以使用write( )函数将一个向量输出到文件中。此外,cat( )函数也可以利用参数file输出向量。如下代码所示:a=1:8write(x, data.txt) #将一个数值向量保存到文件data.txt中b=rep(c(T, F),each=4)write(y, data.txt,appends=T) #在文件末尾添加一个逻辑向量c=l
34、etters1:3write(z, data.txt,append=T) #在文件末尾再添加一个字符向量d=as, factor(rep(c(a,b),4)cat(因子向量包括两个类别: a、br,file=data.txt,append=T)write(d, data.txt, append=T)#在文件末尾再添加一个因子向量数据文件的输出 1) write.table()函数write.table()函数可以用来输出CSV格式的文件,其语法格式如下: write.table(x, file = , append = FALSE, quote = TRUE, sep = , eol = n,
35、 na = NA, dec = ., s = TRUE, s = TRUE, qmethod = c(escape, double), fileEncoding = )set.seed(1)x=matrix(rnorm(12),3)write.csv(x,file=data.csv) #将矩阵x输出到文件data.csv中写入Excel文件本小节以包openxlsx为例,对xlsx格式文件的读取进行讲解。在使用这个包之前,首先要用install.packages( )函数安装这个包,命令如下: install.packages(openxlsx)write.xlsx( )函数将数据保存为xls
36、x格式,用法如下: datawrite.xlsx(data, data.xlsx) #将数据框data以xlsx格式进行输出如上所示,该函数将一个数据框变量保存为xlsx格式文件,并默认保存在工作目录下。这个文件只包含一个名称为“Sheetl”的表。由于一个xlsx格式文件可以包含多个表,因此可以将多个不同结构的数据保存在同一个文件的不同表中,如: ab=matrix(1:6, 2)c=1:3d=list(a, b, c)write.xlsx(d, data.xlsx, sheetName=letters1:3)工作空间的保存和加载save( )函数用于将数据保存为RData格式。在保存数据时
37、,该命令对于变量的类型没有要求,可以保存任意类型的数据,如: a=1: 10 #构建一个向量b=matrix(1: 6,2)#构建一个矩阵c-data.frame(x1=1: 3, x2=letters1: 3)构建一个数据框d=list(a, b, c)#构建一个列表save(a, b, c, d, file=sample.rdata)#将以上变量保存到文件sample.rdata中变量的预处理 在R语言中,数据集常常使用数据框的形式表示。如下代码所示: hospital patients costs df dfhospital patients costs1 New York 150 3.
38、12 California 350 2.52. 改变变量的名称如下代码所示:df$costs_euro df$costs df$patients dfhospital patients costs_euro1 New York 100 3.12 California 300 2.53. 定义缺失值如下代码所示:# 将年龄显示为99岁的定义为缺失值 df$degreedf $ patients = 300 - NA # 某一变量筛选条件 variablecondition df$degreedf $ patients = 200 df$degreedf $ patients 200 df hos
39、pital patients costs_euro degree1 New York 100 3.1 mild2 California 300 2.5 serious# degree为新建变量,且为满足patient的逻辑筛选条件下建立的新变量变量重命名在R语言中,变量的重命名常用的方法,分别是利用names( ), colnames( ), rownames( )等函数进行修改,这些函数是在原数据集中修改变量名。变量类型的转换R语言中,可以使用以下函数判断变量类型和对变量类型进行转换:is/as.numeric( ) 是否/转换为数值型is/as.character( ) 是否/转换为字符型
40、is/as.vector( ) 是否/转换为向量is/as.matrix( ) 是否/转换为矩阵is/as.data.frame( ) 是否/转换为数据框is/as. factor ( ) 是否/转换为因子is/as.logical( ) 是否/转换为逻辑型字符串的处理R语言中分割字符串是使用strsplit( )函数来实现的,strsplit( ) 函数是一个拆分函数,该函数可以使用正则表达式来对字符串进行匹配拆分。它的语法结构是: strsplit(x, split, fixed= FALSE, perl= FALSE, useBytes= FALSE)对字符串It requires no
41、n-string elements to be converted to strings.中间的空格进行拆分。第一种拆分方式的代码如下: x y y11 It requires non-string elements to 6 be converted to strings. 第二种拆分方式的代码如下: #用NULL串拆分 y y1 1 I t r e q u i r e s n o n - s t r i n g23 e l e m e n t s t o b e c o n v e r45 t e d t o s t r i n g s .第三种拆分方式的代码如下: y y11 It re
42、quires non-string elements to be converted to strings. 字符串拼接将c(a,b, c, d, e)和c(A, B, C, D,E)拼接,拼接方式为:(1)直接拼接;(2)用空串拼接;(1)用拼接。代码如下: x y paste(x, y) #拼接方式1, 将两个字符串向量拼接,sep取默认值1 a A b B c C d D e E paste(x, y, sep= ) #使用空格进行拼接,结果与拼接方式1相同1 a A b B c C d D e E paste(x, y, sep=) #拼接方式2, 将两个字符串向量用空串拼接1 aA
43、bB cC dD eE paste(x, y, sep=) #拼接方式3, 将两个字符串向量用拼接1 aA bB cC dD eE字符串长度计算计算字符串长度可以用nchar( )函数来实现。判断c(asfef , stuff.blah.yech, year-month-day, NA, , ddd.ff)中每个字符串的长度。代码如下: x nchar(x)1 6 15 15 NA 0 8 nzchar(x)1 TRUE TRUE TRUE TRUE FALSE TRUE字符串截取截取字符串通常使用substr( )函数和substring( )函数,两个函数的功能几乎是相同的,只是参数设置不
44、同。这两个函数的语法结构如下: substr(x, start, stop)substring(text, first, last = 1000000L)substr(x, start, stop) - valuesubstring(text, first, last = 1000000L) sprintf (Hello : %s, Word)1 Hello : Word使用stringr包处理字符串使用stringr包之前,先需要安装和加载stringr包。install.packges(stringr)library(stringr)查看字符向量c(ssss,str_str)中是否包含有字
45、符串str,如果不包含,则在相应位置输出空值;如果包含,则在相应位置返回该字符串。str_match(c(ssss,str_str),str),1 1, NA2, str日期变量的处理和转换在R语言的实际项目分析中,时间是一个重要的数据,在很多数据分析项目中时间序列是重要的分析指标,本节讲述R语言是如何处理日期和时间的。程序员在编程中遇到的第一个与时间相关的问题大多是如何取系统时间,R语言取系统时间常使用的函数是date( )函数、Sys.Date( )函数和Sys.time( )函数。 date ()1 Sat Jan 09 12:13:29 2021 class (date ()1 cha
46、racter在R语言中,将文本转换成日期和时间通常使用as.Date( )函数、as.POSIXct( )函数、as.POSIXlt( )函数、strptime( )函数。下面是这几个函数的语法结构: as.Date(x, format)as.POSIXct(x. format. tz=, .)as.POSIXIt(x. format, tz=, .)strptime(x, format, tz=)字符串类型的数据可以转换成时间类型的,当然时间类型的数据也可以转化为字符串类型的,常用的函数有format( )函数和strftime( )函数,它们的语法格式如下: format(x,format
47、,tz=)strftime(x,format,tz=)清洗重复数据duplicated( )函数会在数值第一次出现的时候返回FAL.SE,在数值重复出现的时候返回TRUE,代码如下: x duplicated(x)1 FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE经过查询,向量x中有TRUE值,说明x中包含重复值。去除重复值的第二个步骤是查找重复值的索引值,该操作使用which( )函数来完成,代码如下: x y which (y) #返回重复值的索引位置1 4 5 8 9去除重复值的主要思想就是把上面找到的索引值以外的数据从目标数据中取出并
48、放到一个新的对象中。 x y new new1 5 6 7 8 9缺失数据处理R语言中,NA为Not Available的缩写,代表缺失值,NaN为Not a Number的缩写,代表不可能值,Inf和-Inf代表正无穷和负无穷。函数 is.na( )、 is.nan( )和is.infinite( )可以分别用来识别缺失值、不可能值和无穷值。每个返回结果都是TRUE或FALSE。 y is.na(y)1 FALSE FALSE FALSE TRUE TRUE is.nan(y)1 FALSE FALSE FALSE TRUE FALSE is.infinite(y)1 FALSE FALSE
49、 TRUE FALSE FALSE缺失数据的处理一般来说,缺失值的处理包括两个步骤,即缺失数据的识别和缺失值处理。在R语言中缺失值通常以NA表示,可以使用函数is.na( )判断缺失值是否存在,另外函数complete.cases( )可识别样本数据是否完整从而判断缺失情况。在对是否存在缺失值进行判断之后需要进行缺失值处理,常用的方法有删除法、替换法、插补法等。使用均值替换法对缺失数据进行填充 data data2:3, 5 data ,1 ,2 ,3 ,4 ,51, 0 -1 -1 -4 -22, 7 -5 -7 3 NA3, -5 4 -3 2 NA4, -3 0 4 3 1 datais
50、.na(data) data ,1 ,2 ,3 ,4 ,51, 0 -1 -1 -4 -2.00000002, 7 -5 -7 3 -0.38888893, -5 4 -3 2 -0.38888894, -3 0 4 3 1.0000000异常值识别和处理 异常值指的是样本中的极少数样本点,其数值明显偏离于所属样本的绝大部分观测值,所以也称为离群点。利用3 原则过滤数据中的异常值如下代码所示: data daMean daSD cutoff outindex - datacutoff2 outindex 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
51、ALSE FALSE FALSE FALSE FALSE 13 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 25 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 37 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 49 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
52、ALSE FALSE FALSE FALSE FALSE 61 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 73 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 85 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 97 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
53、ALSE FALSE FALSE FALSE FALSE109 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE121 FALSE FALSE FALSE TRUE根据箱型图检测异常值boxplot.stats()函数用于单变量异常值检测的示例如下所示: set.seed(3147) x boxplot.stats(x) $out #输出异常值1 -3.456658 boxplot(x) #绘制箱线图数据集的合并与拆分cbind( )函数是根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind(
54、 )最后变成m+n列,合并前提: cbind(a, c)中矩阵a、c的行数必需相符。rbind( )函数是根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind( )最后变成m+n行,合并前提: rbind(a, c)中矩阵a、c的列数必需相符。R语言基本图形R语言的基本图形是由一些基本绘图函数来实现的,这些绘图函数通常会生成一个默认而且相对完整的图形,这些图形基本可以满足实际应用的需求。散点图 x y plot(x, y, xlab = 广告投入(万元), ylab = 销售额(百万元), main = 广告投入与销售额的关系)plot(x, y, xlab = 广告投入(万元),
55、ylab = 销售额(百万元), main = 广告投入与销售额的关系, pch=16, col=red, cex=2) # pch为指定绘制点时使用的符号,不同的数值会显示不同的符号。取值16表示实心圆点,cex为指定符号的大小。 点图sale1months dotchart(sale1, labels= months, main=每个月的销售额 , color = red)折线图 sale1months plot(sale1, type = o, main = 销售额趋势图, col = red, xlab =月份, ylab =销售额) # 折线图如下左图所示sale2lines(sal
56、e2, type = o, col = blue) # lines函数是在原有图形上新绘制一条线。曲线图 curve(sin(x), -2 * pi, 2 * pi, type = o) curve(sin(x), -2 * pi, 2 * pi, n=30, type = p) #绘制点的数量个数为30条形图H1= c(28, 83, 58) #表示销售额,单位为百万元cols= c(red,orange,green)barplot(H1, main=销售额, col= cols, xlab = 地区, ylab = 销售额, names.arg=c(北京,上海,广州)barplot(H1,
57、 main=销售额, horiz=T, col= cols, xlab = 地区, ylab = 销售额, names.arg=c(北京,上海,广州)饼图 sale= c(1, 2, 4, 8) #每季度对应的销售额情况,单位为百万元 names = c(春季, 夏季, 秋季, 冬季) cols = c(brown,orange,red,green) #指定每季度对应的颜色 pie(sale, labels=names, main = 各季度销售额情况) #绘制饼图,系统自动分配颜色 percent = paste(round(100* sale/sum(sale), %) #计算每季度销售额
58、的占比情况 percent 1 7 % 13 % 27 % 53 % pie(info, labels=percent, main = 各季度销售额占比情况, col=cols) # 绘制饼图,按指定颜色着色,并按每季度销售额计算全年的占比情况 legend(topright, names, cex=0.8, fill=cols) # 添加图例标注箱线图h boxplot(h, col = orange)直方图 v hist(v, main=学生成绩分布, xlab = 分数, ylab=学生数, col = green,border = brown)hist(v, main=学生成绩分布,
59、xlab = 分数, ylab=学生数, col = green, border = brown, xlim = c(68,90), ylim = c(0.5, 3.5), breaks = 5) #使用xlim和ylim参数,可以指定X轴和Y轴允许的值的范围。每个条的宽度可以通过使用断点来决定。R语言图形修饰图形可以看成是由点、线、文本和多边形(填充区域)等不同元素组成的,在原有图形上新添加不同的元素,就会得到不同的效果。使用不同lty和pch参数绘制一月至五月的销售额趋势图。sale1plot(sale1, type=b, lty=3, lwd=5, pch=21, cex=2, main
60、 = 销售额趋势图) plot(sale1, type=b, lty=6, lwd=5, pch=3, cex=2, main = 销售额趋势图)绘制北上广地区销售额的条形图,并使用字体相关参数创建斜体、1.5倍于默认文本大小的坐标轴标签(名称),以及粗斜体、2倍于默认文本大小的标题。 H1= c(28, 83, 58) #表示销售额,单位为百万元 cols= c(red,orange,green) barplot(H1, main=北上广地区销售额, col= cols, xlab = 地区, ylab = 销售额, names.arg=c(北京,上海,广州), font.lab=3, ce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 例析新川西民居与后现代设计对比
- 2025转让商铺经营权合同模板
- 2025车辆借用合同协议书模板
- 2025劳动合同范本
- 2025年沈阳货运从业资格证考试题技巧答案大全
- 2025年临沧货运从业资格考试
- 2025年合肥货运从业资格考试试题及答案解析
- 2025年三门峡货运从业资格证继续教育考试题
- 2025重点公益林管护合同
- 特殊门锁行业深度研究报告
- 新媒体与社会性别智慧树知到期末考试答案章节答案2024年复旦大学
- 市场营销学每章习题集
- KPI 统计和趋势图分析
- 谭浩强经典教材《C语言程序设计》课件_电子版
- 最新建筑材料标准以及分类
- 产品质量控制流程图
- 民间疗法—敷脐
- 教科研基地汇报材料
- 质量等级说明
- 消防工程防排烟及通风施工工艺方法
- 国民经济行业与分类代码
评论
0/150
提交评论