13.获取帮助
获取帮助:help.start()
了解函数信息:
①help(),如help(sum)
②?函数名,如?plot
args():快速了解函数参数,不用查阅详细文档
如args(plot),终端中,function列出具体的参数要求,
example():查看函数的使用案例
如果查询的是普通函数,会给出示例,如example(mean),example(hist)
demo():案例图
help(package=包的名字):查询R包
如help(package=ggplot2)
有些R包会包含更规范的vignette文档,例如简介、教程、开发文档等,可通过vignette函数查看,但不是每个包都包含vignette文档
需要使用library载入R包后,才能使用help搜索相关文档,或者直接使用??函数名,不用加载包
help.search()简写为??函数名:本地搜索,不知道函数的详细信息时使用
如搜索跟热图有关的函数:help.search("heatmap")【此处注意加引号】或者??heatmap【无引号】
apropos(""):列出所有包含关键字的内容,可以通过mod参数调整查询的内容,如mod="function",只列出函数
如apropos("sum",mod="function")
RSiteSearch():网络搜索
rseek.org(使用Google)
14.Excel案例
R与Excel最大的一个不同就是R软件不能使用鼠标。因此,在Excel欢总可以非常轻松地完成选择、框选、复制、粘贴、填充、排序、筛选等等操作,而在R中必须使用代码来完成。
然而,代码更适合批量化和自动化。R往往用来处理大数据,使用鼠标反而不方便。
在Excel中,每1个表格称为1个单元格,单元格里可以存储各种类型的数据。当光标放在单元格中,数字菜单中对应的数据类型会相应发生变化。本案例中,城市和所属省的数据类型是文本,金额是自定义,增长率是百分比,人口是数值。Ctrl+1打开单元格格式。在Excel中可以使用鼠标选择任一单元格进行数据修改。
将表格中类型为数值的列单独复制出来,形成1个矩阵。在数据分析中,一般行是观测值,列是变量值,所以每一列数据的数据类型一般都一致,这样是为了方便计算。可以对每一行和每一列分别进行计算,如计算每一列的总和和平均值。在Excel中计算总和使用Alt+=即可,然后可以使用填充柄进行填充。也可以使用函数average计算平均值。
如果想统计每个省有多少个城市入选,即频数统计,并且对城市的GDP总和进行排序,在Excel中可以使用数据透视表功能。
数据透视图中,双击求和项可以选择其他指标。如标准差(反映数据的离散程度或统计分布程度,SD越大,离散程度越大,SD越小,说明数值的分布越接近平均值)。方差也是反映数据局的离散程度。
数据分析后需要进行数据可视化。选择一些数据后选择插入图表。
15.内置数据集
在学习R的过程中需要完成许多操作。但这些操作需要固定格式的数据作为练习。比如恰好需要一个矩阵、一个数据框、一个时间序列等。统计建模、回归分析等实验也需要合适的数据集。
R软件中内置了大量数据集,可以利用这些数据集学习和测试。这些数据集存储在R中的datasets包中。默认已经加载了这个包。代码:help(package="datasets")。
这些数据一般都收集于真实的调查数据,其中有很多非常经典的数据集。这些数据集基本都是收集美国或者欧洲的情况。比如很多个数据集都是美国50个洲的数据信息。有些甚至包含了18世纪的一些观测数据。如sunspot.year收集了从1700到1988年每年的太阳黑子数。
可以使用data函数访问这些数据集。直接敲data()就会列出很多数据集。结果栏中,左侧为数据集名,右侧为内容简介(不显示数据类型)。这些数据集包含了R中会用到的所有数据类型,包括向量、矩阵、列表、因子、数据框以及时间序列等。直接输入数据集的名字就可以使用这些数据集。如直接输入rivers就会输出一个向量。
这些数据集的名字都是内置的,一般我们在给变量命名的时候不要重复,否则数据集在当前会话中就会被置换掉。
如重新定义rivers ← c(1,2,3)后,重新加载数据集data(rivers),即可回到内置数据集。
想查看数据集除了可以直接敲名字显示数据集之外,还可以使用help函数来查看每个数据集具体的内容。如help(mtcars)。
names(euro)就会输出向量的的属性信息。
可使用data.frame将多个数据集构成数据框。如state ← data.frame(state.abb,state.name,state.region,state.area,state.division
矩阵数据集特别适合画热图。如heatmap(volcano)
Titanic是泰坦尼克乘员统计,是一个数组。
时间序列和数据框类似,不过具有时间序列的顺序。时间序列往往可以反映出变化情况和变化趋势等。
如data(package="MASS")可以加载MASS包。
如data(package=.packages(all.available = TRUE))可以加载R中所有可用的数据集。
如果不想加载R包,但想使用其中的数据集,可以直接使用data函数来进行加载。如data(Cars93,package="MASS")后再输入Cars93,可加载该数据集的内容
16.数据结构
R既是统计软件也是一种编程语言。编程语言就需要介绍到数据结构。
数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合。
统计软件中需要严格区分数据的类型。
R语言中的数据类型:
1.数值型numeric,数值可以用于直接计算,加减乘除;
2.字符串型character,可以进行连接、转换、提取等;
3.逻辑型logical,真或者假;
4.日期型,等。
在R中也需要针对不同的数据类型进行不同的处理,编程语言都需要定义不同的变量来存储不同的数据。
普通数据结构:向量、标量、列表、数组、多维数组等。
R也有多种类型的数据结构,这些被统称为对象object,是指可以赋值给变量的任何事物,包括常量、数据结构、函数甚至图形。对象都拥有某种模式,描述了对象是如何存储的,以及某个类。
R中的对象类型:1.向量,标量;2.矩阵;3.数组;4.列表;5.数据框;6.因子;7.时间序列……
它们在存储数据的类型、创建方式、结构复杂度以及用于定义和访问其中个别源的出处等方面均有所不同。
17.向量
向量,vector,是R中最重要的一个概念,它是构成其他数据结构的基础。R中的向量概念与数学中向量是不同的,类似于数学上集合的概念,由1个或多个元素构成。向量其实是用于存储数值型、字符型或逻辑型数据的一堆数组。
用函数c来创建向量。c代表concatenate连接,也可以理解为收集collect,或者合并combine。
定义x变量:x ← c(1,2,3,4,5),不同元素之间用逗号分隔。这就定义好了一个向量x。接下来在终端中输入x就可以输出x的内容。在这里其实等同于调用print(x)函数来打印x的内容,不过可以省略print。
向量中的元素可以是数值型、字符串型或逻辑型。如y ← c("one","two","three")3个字符串型向量。
特别注意:在R中,字符串一定要加引号。在安装R的扩展包,搜索包的名字时,也一定要加引号。因为在R中如果不加引号,就会把这些字符串当作对象,例如变量或者函数,然后去整个软件中搜索,搜索不到就提示对象找不到。不加引号=内部人,加引号=外部人。而且,如果字符串间有空格或者逗号,如hello,world,不加引号时就会发生矛盾,不知道是同1个词还是2个。单引号或者双引号都可以。
再定义1个逻辑型向量。代码为z ← c(TRUE,T,F)。逻辑型向量包括TRUE或者FALSE,可以用于条件判断。在R中使用逻辑型向量的地方全部大写,也可以简写成单独的T或者F。逻辑型向量就不用加引号。但是不能使用首字母大写的模式如True,此时会被当成字符串,必须加引号。
也可以使用快捷方式构建向量,如冒号可以用来构建等差数列。c(1:100)就会输出1到100的等差数列。如果想调整等差的差值,可以使用seq函数生成序列,seq(from=1,to=100)。seq函数第一个参数为from起始值,第二个参数为to终止值。可以加上参数by用来设置等差值,默认是1,seq(from=1,to=100,by=2)。参数length.out用来控制元素的个数,seq(from=1,to=100,length.out = 10)表示输出10个元素,这样就只输出1到100之间的10个值,这样差值就变大了。
如果要生成重复序列,可以使用rep函数,是repeat的简写。rep函数第1个参数为要重复的内容,可以是标量如2,也可以是向量。times参数指定重复次数,可以省略,如rep(2,5),即重复5次2,rep(x,5)即重复5次x向量。向量中每个元素连续重复的次数可以通过each函数来控制,结果输出是1 2 3 1 2 3时用rep(x,2),还是1 1 2 2 3 3时用rep(x,each=2)。当each和times同时使用时,每个元素出现的次数就是它们的乘积,rep(x,each=2,times=5)。
向量的一个特点是,所有的元素必须是同一类型,即都是数值型、字符串型或者都是逻辑型,不能混合,便于计算。如定义a ← c(1,2,"one")后,输入a输出结果为"1","2","one",3个都是字符串型,数值型对象被转换为字符串型。可以使用mode函数来查看变量的数据类型。如mode(a),输出为"character"即字符串型,mode(z)输出为"logical"即逻辑型。
如果向量中只有1个元素,也可以不加c函数,直接赋值,例如a=2,b=3,c="hello,world",d=TRUE。输入a;b;c;d可以输出这4个变量的内容。这种向量也称为标量,只用来存储一个值。
R中最基础的数据结构是一个集合,而不是一个标量。这种被称为向量化编程。为什么R的基本数据类型是向量呢?因为R是统计软件,面向的是统计学家,而不是计算机科学家。
如有2个集合,x ← c(1,2,3,4,5),y ← c(6,7,8,9,10)。需要将x集合中的每个元素数值扩大1倍再与对应的y元素数值相加,输入x*2+y就可以输出结果。后续对矩阵进行运算也非常方便。
向量化编程是R的精髓所在,也是R与其他编程语言最大的不同。向量化编程可以避免使用循环,效率很高。如x[x>3]即可输出x向量中大于3的值。在R中,有很多地方可以用到向量,如在rep函数中,我们可以给定一个向量单独控制每个元素的重复次数,如rep(x,c(2,4,6,1,3))。
18.向量索引
如何访问向量中的元素。向量是一个集合,访问其中的元素才能够对向量进行运算。访问向量元素也称为索引。R中有多种访问向量的方法,这些索引方法可以适用其他数据结构。
首先是正整数索引,即根据元素在集合中的位置来访问。比如创建向量x <- c(1:100),包含100个元素。可以用函数length统计向量中元素的个数,length(x),此时返回值为100,说明有100个元素。使用x[1]则是访问向量中第1个值。R中元素的位置从1开始,而不是从0开始。如果输入x[0],什么也不会输出,因为0不是正整数。
同样,可以使用负整数进行索引,表示访问除了这个元素的其他所有元素。如x[-19]。索引也可以使用1个向量,一次可以访问多个元素,如x[c(4:18)]即输出第4~18个元素;或x[c(14,29,40,50)],就会输出这些对应位置的元素。向量中可以没有顺序,也可以多次访问同一个元素。如x[c(11,22,22,55,55)]。但是索引中不可以既有正数也有负数,如x[c(-4,2,2)],无法输出结果。
第二种方式,可以使用逻辑向量来进行向量的索引,逻辑值为TRUE则被输出,为FALSE则不输出。这种方式是R中最重要的访问数据的方式。这也是向量化编程的一大优点,相当于if条件语句循环访问元素,条件为真则输出,条件为假则不输出。如再定义向量y <- c(1:10),使用T和F来代表逻辑值。写1个包含逻辑值的向量,10个元素对应10个逻辑值,即y[c(T,F,T,T,T,F,F,T,F,F)]。这样就只把逻辑值为真的输出。其实逻辑值的数目不一定与元素的数目刚好相等,可以循环使用。比如只有一个逻辑值y[c(T)],就判断了所有元素。如果y[c(F)],就会不输出元素。如果是y[c(T,F)]就会按照顺序进行判断。如果是11个逻辑值y[c(T,F,T,T,T,F,F,T,F,F,T)]对应10个元素,会产生一个缺失值NA。
不仅可以在索引中直接给出逻辑值,而且可以更加方便的直接给出条件判断表达式,如y[y>5]这样就只输出>5的元素。甚至可以使用更加复杂的逻辑表达式,如y[y>5 & y<9],这里的&是同时AND。
如果是字符串向量,可以使用%in%,表示元素是否在向量中。有点类似python中的字典判断,例如定义z <- c('one','two','three','four','five'),'one' %in% z返回值为TRUE,说明字符串'one'是向量z中的1个元素。我们可以将这个逻辑条件添加到索引中,即z[z %in% c('one','two')],输出结果为'one','two'。
判断元素是否在向量'one','two'中,写为z %in% 'one','two',z中只有前2个在,那么逻辑值就是TTFFF,用在索引中就只输出前两个元素,即定义k <- z %in% c('one','two'),z[k]输出结果为'one','two'。
第三种访问向量的方法是利用元素名称进行访问,可以使用names函数对向量的每个元素添加名称。如names(y) <- c('one','two','three','four','five','six','seven','eight','nine','ten')。再输出向量y就会有2行,1行是向量名称,称为names属性,另1行是向量的元素值,称为value。接下来就可以通过每个元素的name访问它的值。因为二者是一一对应的。例如euro数据集中,可以通过names函数访问向量的名称属性,即euro[c(''FRF')]也可以使用每个名称来访问向量中的元素。names在大数据集中是一个高效的方法,因为向量是一维的。类似excel表格中的列名,也就是表头。
修改向量:包括添加数据、删除数据和修改数据。如果需要添加向量,直接使用函数c来添加一个额外的向量即可。现在向量x中有100个元素,使用x[101] <- 101 就可以给向量x中增加一个元素101。批量赋值见下图。
对v向量中第20个元素赋值为4,没有被赋值的元素的值都为NA。
如果想在向量中间插入一个元素如在5和6之间插入99,这种情况可以使用append函数,其中的after参数可以指定需要插入的位置,即append(x=v,values=99,after=5)。如果after=0则表示在向量的头部插入数据。
如果需要删除整个向量,可以使用rm函数。即rm(v)。如果想删除向量中的某个元素,可以采用负整数索引的方式。如去除向量y中前3个元素,可以y[-c(1:3)],然后将这个结果重新赋值给向量y,即重新生成一个向量替换到原来的向量。如果想要修改向量中某个元素的值,直接利用索引找到这个元素,再重新赋值即可,如y['four'] <-100,新的值会直接保存在原来的向量中。又如定义向量v[2],使v[2] <- 15,输出结果v[2]为15。这里v[2]是数值向量,不能赋值给字符串,如v[2] <-'one',这样向量中的其它元素也都会变成字符串。
19.向量运算
因为向量是R中最基本的数据结构,向量的运算也是R中最基本的运算。向量可以进行多种形式的运算,例如,定义x <- 1:10,x+1输出结果为每一个元素都+1;x-3则每一个元素分别减去3。将运算好的结果赋值给原向量,就是对原向量进行操作。
也可以进行向量的乘、除、乘幂和取余等计算。和数学运算法则类似,不过在R中是对每个元素进行运算,即向量化编程。
也可以进行向量和向量的运算。定义y <- seq(1,100,length=10)。
x+y:对应元素分别相加
x*y:对应元素相乘
x**y或者x^y:乘幂运算
y%%x:求余运算
y%/%x:整除运算
如定义z <- c(1,2),只有2个元素,将x与z作上述运算,那么其中较短的向量z将会被循环使用。当向量z中有3个元素,x中有10个元素,运算时会提示x与z的元素个数不匹配,即较短的向量与较长的向量中元素个数需要成整数倍才能进行循环。
向量也可以进行逻辑运算,每一种运算都可以返回逻辑值TRUE或者FALSE。如果使用运算符连接2个向量,R会将2个向量中的元素进行一一比对。而包含运算符%in%则不是一一比对,而是测试左边向量的值是否在右边的向量之中。
逻辑运算中,比较2个对象是否相等时,应该使用2个=,因为1个=是赋值操作,x=y是将y的值赋给x,不仅不能判断,反而修改了x的值。
R中提供了大量用于向量计算的数学函数和统计函数,这些函数可以快速计算出结果,省去循环的麻烦。
定义向量x为-5到5。
abs():返回向量的绝对值
sqrt():计算平方根
log():求对数,第一个参数为要求的值,第二个参数base为底数,不加base参数,默认是自然对数
log10():常见的以10为底的对数
exp():计算向量中每个元素的指数
ceiling():返回不小于x的最小整数
floor():返回不大于x的最大整数
trunc():返回整数部分
round():四舍五入,第一个参数为向量,digits参数控制要保留的位数
signif():与round函数类似,保留小数部分有效数字
还有sin、cos、tan等三角函数。
统计函数不是对向量中的每一个元素进行处理,而是对整体数据进行处理后返回一个值。
sum():求和
max():向量中的最大值
min():向量中的最小值
range():向量中的最大值和最小值
mean():向量的均值
var():向量的方差,可以利用round函数设置保留2位小数,即round(var(vec),digits=2)
sd():向量的标准差
prod():向量中元素连乘的积
median():中位数
quantile():计算分位数,quantile(vec,c(0.25,0.5,0.75))第一个参数为待求分位数的数值型向量,probs为1个0~1之间的值组成的数值向量。如probs是c(0.4,0.5,0.8)就是分别计算四分位数、中位数和八分位数。
which函数:向量中元素的位置,即向量中的索引值
which.max():向量中最大值的索引值,即所在的位置
which.min():向量中最小值的索引值,即所在的位置
which(t==56):向量中56这个元素所在的位置
which(t>3):向量中>3的所有元素所在的位置
t[which(t>4)]:输出t向量中所有>4的元素的数值
20.矩阵与数组
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。
在R软件中,矩阵是有维数的向量,这里的矩阵元素可以是数值型、字符型或者逻辑型,但是每个元素都必须拥有相同的模式,这个和向量一致。R中的某些计算要求输入的数据类型必须是矩阵。
R内置的数据集中,比较有名的矩阵数据集有iris3、state.x77。利用heatmap函数直接输入矩阵就可以绘制热图。
可以通过matrix函数来创建矩阵。
matrix(x,norw,ncol):第一个参数是向量x,nrow指定行数,ncol指定列数。写为m <- matrix(x,nrow = 4,ncol = 5)或者m <- matrix(1:20,4,5)。特别注意:行数和列数的分配必须满足分配条件。如20个元素的向量在4行和5列中正好可以分配完。当元素数目<行列数不匹配时就会报错。如果行列数中只提供一个,R会自动分配。矩阵是默认按照列进行分配的,可以通过byrow这个参数来选择按行还是按列排列元素,即m <- matrix(x,norw = 4,byrow = T)。byrow = T即按行排列,byrow = F为按列排列。
rnames和cnames函数可以通过列表定义矩阵行和列的名字,如rnames <- c('R1','R2','R3','R4'),cnames <- c('C1','C2','C3','C4','C5')。再使用dimnames(m) <- list(rnames,cnames),这样矩阵的行和列就有了名字,后面可以通过名字来访问这个矩阵。
dim函数是dimension维数的简称,dim函数可以显示向量的维数,如dim(x)。可以通过dim函数来为向量添加维数以构建矩阵,如dim(x) <- c(4,5)。
R中的数组就是多维的矩阵。如果利用dim函数给向量3个值,那么就是三维数组,如dim(x) <- c(2,2,5)。输出的数组实际上是一个有空间结构的数据集,但是在平面中无法展示。数组还可以利用array函数来创建,主要有3个参数,其中第一个参数为向量,第二个参数dim是一个数值型的向量,给出各个维度下标的最大值,dimnames是可选的各个维度名称的标签。
还可以创建字符型或者逻辑型的矩阵或者数组。Titanic也是R中的内置数组。
介绍一下矩阵的索引,即如何访问矩阵的数据。因为R中不可以使用鼠标选择数据,因此要修改数据需要用代码定位到这个数据。
首先可以使用矩阵下标进行访问。R使用线性代数中的ij记号体系,i表示行号,j表示列号,通过ij就可以访问矩阵中任意一个元素。如仍然是m <- matrix(1:20,4,5,byrow = T)这个矩阵,m[1,2]即定位第一行第二列的数据,也可以一次访问多个数据,如m[1,c(2,3,4)],输出第一行的2、3、4列的数值,又如m[c(1,2),c(2,3)]输出m中的一个子集。如果省略行号或者列号,则是访问所有的行和列,如m[2,]则是访问第2行,m[,2]则是访问第2列。ij之间的逗号非常重要,如果不加逗号,直接就是一个数字,访问对应的行。也可以使用负整数来进行索引,m[-1,2]表示访问第2列中除第1行外的其它结果。
如果矩阵中行和列具有名称属性,也可以通过名称来访问矩阵。使用m['R1','C3']就可以访问元素,需要注意,名称是字符串,需要添加引号。
以state.x77举例:
矩阵也可以进行多种运算。
m+1:矩阵中每个元素都加1
m*2:矩阵中每个元素都乘2
m+m:对应位置的元素相加
在此创建n <- matrix(1:20,5,4),此时m+n会报错,因为行列数不同,所以无法运算。因此,矩阵的四则运算需要行和列一致。
如果需要计算矩阵中单独行或者单独列的值,可以取出矩阵中单独的行或列,将这些值存到一个向量中,对向量进行运算即可。如t <- m[,1],sum(t)。不过这很麻烦。
R中包含了很多直接计算矩阵的函数,只需要在原函数前加上row或者col就可以,如colSums(m),这样就可以计算矩阵每一列的和,rowSums(m)可以计算矩阵每一行的和。同样还有colMeans和rowMeans可以计算矩阵每行和列的平均值。
矩阵也可以进行乘法,矩阵的乘法分为内积和外积。
内积:n*t
外积:n %*% t
diag函数:求对角矩阵的对角线,对角矩阵要求行列数相同即方阵,如diag(n)返回对角线位置的值。t函数可以对矩阵进行转置,将行列互换,如t(m)。
21.列表
在R中,列表是最复杂同时也很重要的数据结构。列表是一些对象的有序集合,列表中可以存储若干向量、矩阵、数据框,甚至其他列表的组合。
向量和矩阵都要求数据类型必须一致,比如只能同为数值型、字符串型或逻辑型,而列表可以存储多种数据类型混合的数据结构。
列表是R中最大的容器,在模式上和向量类似,都是一维数据集合;列表中的对象可以是各种的任何数据结构,甚至列表本身。
R的内置数据集state.center的数据结构是列表,由x和y两个向量构成,每个向量中各有50个元素,是美国每个州的经纬度。
使用list函数创建量表,包含4个对象,分别是数值型向量a,矩阵b,数据框c和字符串d。
建立列表:
a < - 1:20
b <- matrix(1:20,4)
c <- mtcars
d <- 'This is a test list'
mlist <- list(a,b,c,d)
mlist <- list(first=a,second=b,third=c,fourth=d)
列表中的元素可以没有顺序,使用名称时就可以访问数据。
通过索引的方式:
mlist[1]:访问列表中第一个元素
mlist[c(1,4)]:访问1和4两个元素,需要使用向量
state.center[c('x','y')]:通过名字访问列表
此外,列表和数据框可以通过$访问。
mlist$first(此处元素名称可以自动补齐)
milst[1]:单中括号,输出的是列表的一个子集,本质上还是一个列表,如果一次访问多个不同类型的数据,输出结果只能是列表。
mlist[[1]+]:双中括号输出的即为元素本身的数据类型,每次只能访问一个元素。
class(mlist[1]):可以查看输出数据的类型
mlist[[5]+] <- iris:将iris添加为列表的第5个元素
mlist[-3]:返回除第3个元素外的其他元素,可采用这种负索引的方式赋值给原来的列表以删除某个元素
mlist[5] <- NULL:将列表元素赋值为null以删除该元素
22.数据框
数据框是R中最重要的,一种表格式的数据结构。数据框旨在模拟数据集,与其他统计软件如SPSS或SAS中的数据集概念一致。一般将待处理数据转换成数据框就可以用R中的函数进行分析。
数据集通常是由数据构成的一个矩形数组,在统计学中,行表示观测,列表示变量;数据库分析师则称其为记录和字段;在数据挖掘和机器学习中称为事例和属性。
数据框实际上是一个列表而非矩阵,因为矩阵要求所有数据类型必须一致,而数据框中可能只有一部分是矩阵,每个部分的数据类型都不一定相同。
列表中的元素是向量,这些向量构成数据框的列,每一列必须具有相同的长度,故数据框是矩形结构,且数据框的列必须命名。
数据框第一行一般是表头,指明每一列的内容,是字符型向量。下面每一行都是一个列表,而每一列如果不算第一行其实是一个向量。不同列的数据类型可以不同。
数据框的特点:
1.形状上很像矩阵;
2.数据框是比较规则的列表;
3.矩阵必须为同一数据类型;
4.数据框每一列的数据类型必须一致,每一行可以不同。
在R中分析的数据需要尽量存储为数据框结构。R内置数据中有很多数据类型为数据框,如iris鸢尾花、mtcars、rock。
state <- data.frame(state.abb,state.name,state.region,state.x77):创建数据框
在R中,将待处理的数据存储为向量,再使用data.frame合并为数据框即可进行分析。
可通过索引来访问数据框中的数据,每次都会输出行名和列名。
state[1]:输出数据框第1列
state[c(2,4)]:输出第2列和第4列
state[-c(2,4)]:添加负索引,去掉该部分内容
state[,'state.abb']或state$state.abb:取出该列的数据
state['Alabama',]:取出该行的数据
women数据集中包含15个女性身高体重的数据。
plot(women$height,women$weight):使用plot函数绘制women数据集的散点图
lm (weight ~ height,data = women):使用lm函数进行线性回归
使用数据框的多列数据,可以使用attach或with函数。
attach(mtcars):加载数据框到R的搜索目录中,加载完成后可以直接在当前窗口中直接敲数据框列的名字,不需要使用$
colnames(mtcars):输出mtcars数据集中所有列的名字
rownames(mtcars):输出mtcars数据集中所有行的名字
detach(mtcars):取消加载(一般在数据使用完成后)
with(mtcars,{gear}):加载mtcars数据集后输出gear列的所有数据
state[[1]+]:双中括号,输出state数据框中第1列的数据,输出格式为向量而不是列表
23.因子
因子是R语言中的一种数据结构。
在R中,变量类型可以分为:
1.名义型变量:没有顺序分别,相互之间独立,如城市名称、所处省份;
2.有序型变量:介于二者之间,不同值之间有顺序关系,但又不是连续的数量变化,如good、better、best和poor、improved和excellent。
3.连续型变量:某个范围中的任意值,如身高、年龄,
生物学中,数量性状→连续型变量,质量性状→名义型变量。
在R中,一般数值型数据→连续型变量,字符串型数据→名义型变量。
名义型变量和有序型变量在R中被称为因子factor。这些分类变量的可能值称为一个水平level,如good、better、best都被称为一个level。由这些水平值构成的向量就称为因子。因此,因子本身也是一种向量,即一种集合,而不是其中某个单独的变量,其中包含的元素可以用来分类。
因子适用于记录某项研究中研究对象满足的不同处理水平或其他分类变量。
因子↔分类↔频数/频率
因子的应用:计算频数、独立性检验、相关性检验、方差分析、主成分分析、因子分析etc.
很多绘图函数中输入的数据类型要求为因子。
如plot函数,如果输入的数据包含因子类型,就会绘制出散列图和箱线图,因为要进行分类,否则会绘制散点图。需要明白数据集中哪部分可以用来作为分类的因子。
mtcars函数中,cyl列表示汽缸数,am列表示变速器类型,可作为因子用于频数统计。
mtcars$cyl:使用$取出cyl列
table(mtcars$cyl):根据cyl列进行频数统计,cyl列是因子,输出结果的4、6、8是level
table(mtcars$am):根据am列进行频数统计
f <- factor(c('red','green','blue','red','green','blue')):定义因子,输出变量f会显示该因子的level,其中颜色为名义型变量
week <- factor(c('Mon','Wed','Mon','Wed','Fri','Fri'),ordered = T,levels = c('Mon','Tue','Wed','Thu','Fri','Sat','Sun')):定义有序变量星期为因子,ordered = T指定为有序变量(从左往右,从小到大),levels指定水平
fcyl <- factor(mtcars$cyl):将mtcars数据集中的cyl列向量定义为因子
plot(mtcars$cyl):输出散点图
plot(fcyl):输出条形图
将连续型变量x分割为n个水平的因子:
num <- 1:100
cut(num,c(seq(0,100,10)):将0到100的数据集按10分组,如果是很大的数据集,就可以使用cut计算每个区间包含的数值是多少,方便频数统计
R的内置数据集中,state.division和state.region是因子类数据。