R是专门用于数据分析和统计的脚本语言,能够更快捷、更强大地分析数据,广泛地应用在每一个需要统计和数据分析的领域。使用R做数据建模、数据统计和分析是一个发现未知和惊喜的旅程,前提,你必须迈出第一步,去学习R语言。R是一种解释型语言,这意味着代码在运行之前不需要编译,在学习R语言时,一款好用的IDE,是学习路上的好助手,我推荐使用RStudio,这是一款专门用于R开发的开源集成开发环境(IDE),官方下载地址是:RStudio,RStudion集成了控制台程序,本文主要通过控制台程序学习R语言。
R语句的分隔符是分号“;”,或换行符,当语句结束时,可以不使用分号“;”,R语言会自动识别语句结束的位置。
一,变量是什么样子?
首先,我们学习变量的用法,变量用于临时存储数据,以便重用。在R语言中,变量不需要声明,直接赋值,变量名是大小写敏感的,为变量赋值的操作符是:<- 或 =,建议使用<- 作为变量的赋值符号,以下代码为变量v赋值,并输出变量的值:
- > v<-3> v
- [1] 3
注意,输出结果[1],表明从变量的第一个原始开始显示,这意味着,变量实际上是一个向量,R语言中不存在标量类型,最小的数据类型是向量,而向量是一系列有序的值。R按照序列的顺序,逐个打印向量的各个元素。
函数print用于输出变量的值,在控制台中,可以直接输入变量名,控制台自动调用print函数打印变量的值。
如果想把赋值和打印处于写在同一行中,可以把赋值语句写在()中,这样,就能在同一行中完成变量的赋值和打印:
- >(v<-3)
- [1] 3
1,变量的类型
R语言中不存在标量类型(scalar type),所有的变量都属于特定的类(class),类用于表示变量属于的类型(type),可以认为类(class)和类型(type)相同,用户可以通过class(variable)函数查看变量的类型:
- > v=1:3
- > v
- [1] 1 2 3
- > class(v)
- [1] "integer"
2,变量的类型检查和类型转换
通过is.* 函数检查变量的类型,通过as.*函数转换变量的类型
- > vc=c('1','2','3')
- > is.character(vc)
- [1] TRUE
- > vi=as.integer(vc)
- > is.integer(vi)
- [1] TRUE
二,序列和向量
向量是有序的数据序列,冒号 : 操作符能够产生一个序列,例如n:m,用于创建从数值n开始,步长为1,依次递增,到数值m结束的有序的数值序列:
- > 1:3
- [1] 1 2 3
步长不为1的数值序列,可以通过seq.int函数来实现,该函数有三个参数,第一个参数是序列的开始值,第二个参数是序列的结束值,第三个参数默认值是1,用于指定步长。
- > seq.int(1,5,2)
- [1] 1 3 5
1,向量的创建
向量(Vector,也叫矢量)是数据的有序序列。函数c把一系列的数据拼接起来,创建一个向量;也可以通过c函数和冒号操作符,创建向量,例如:
- > c(1,2,3,4)
- [1] 1 2 3 4
- > c(1:4)
- [1] 1 2 3 4
也可以通过vector(class,length)函数,创建指定类型和长度的向量,向量的每个元素的值是指定类型的默认值,可以是0,FALSE,空字符串,或NULL。
- > vector('integer',3)
- [1] 0 0 0
R为每个类型都包装了一个创建向量的函数,格式是class_name(length),例如:
- > numeric(3)
- [1] 0 0 0
2,向量的长度
向量的长度,就是序列的元素个数,通过length函数获取向量的长度
- > length(c(1:3))
- [1] 3
3,为向量的各个元素命名
R能够为向量的各个元素命名,元素的命名有两种模式:在创建向量时为元素命名,通过names函数为元素命名:
- > (v=c(a=1,b=2,c=3))
- a b c
- 1 2 3
- > names(v)=c('va','vb','vc')
- va vb vc
- 1 2 3
输出的结果中,并没有[1],这说明,无名的向量是按照序列的顺序输出的。
三,索引向量
R通过下表来访问向量中特定位置的元素,第一个位置是1。向量的索引格式是v[n],n叫做向量的下标,共有三种索引向量的方法。超出范围的下标值,不会导致错误,向量会返回缺失值(NA),不返回任何下标,将返回整个向量的值。
1,下标为整数或整数向量
当n值为正整数时,返回特定位置的元素的值;当n值为负整数时,不返回特定位置的元素的值;当n值为整数向量时,返回特定位置的元素。
- > v=1:3
- > v[1]
- [1] 1
- > v[-1]
- [1] 2 3
v[-1]和 v[c(2:3)]返回的元素相同。
2,下标为逻辑向量
当n值为逻辑向量时,返回位置为true的元素的值;
- > v[v<=2]
- [1] 1 2
v[v<=2]和v[c(TRUE,TRUE,FALSE)]返回的元素相同。
3,下标为字符或字符向量
对于命名向量,给向量传入字符向量,命名向量返回包含名字的元素的值;
- > v=(a=1,b=2,c=3)
- > v[c('a','b')]
- a b
- 1 2
4,向量元素的位置
which函数,返回逻辑向量中为TRUE的位置。
- > which(c(1:3)>1)
- [1] 2 3
which.min(v) 函数是表达式 which(min(v))的简写,表示向量的最小值元素的位置,which.max(v) 函数是表达式 which(max(v))的简写,表示向量的最大值元素的位置
- > which.min(c(1:3))
- [1] 1
四,向量的循环
引入向量的目的,运算符或函数,能够作用于向量中的每个元素,而无需显式地编写循环语句,向量内置隐式循环,用于循环向量的各个元素执行计算。
1,向量和单个数值相加
向量和单个数值n相加,是把向量的每个元素都和单个数值n相加,返回的结果是向量:
- > x<-c(1:3)
- > x+1
- [1] 2 3 4
2,向量和向量相加
向量和向量相加,在相同的序列位置上,对两个向量的元素相加,返回的结果是向量,向量和向量做运算,推荐两个向量具有相同的长度(length):
- > a=1:3
- > b=4:6
- > a+b
- [1] 5 7 9
五,因子(factor)
因子(factor)是一个用于存储类别变量的类型,因子的每个item都是字符类型。因子具有因子水平(levels)向量,用于限制因子的item的取值范围,因子的item只能从因子水平中取值,这意味着,因子的每个item要么是因子水平中的字符,也么是缺失值。
通过factor函数创建因子,factor函数的第一个参数必须是字符向量,通过levels参数设置因子水平,例如,因子sex的值是向量c('f','m','f','f','m'),因子水平是c('f','m'):
- > sex=factor(c('f','m','f','f','m'),levels=c('f','m'))
- > sex
- [1] f m f f m
- Levels: f m
1,因子水平
因子水平,可以通过函数levels(factor)来查看:
- > levels(sex)
- [1] "f" "m"
2,因子水平的命名
使用factor函数创建因子,可以使用labels参数为每个因子水平添加label,注意,labels参数的字符顺序,要和levels参数的字符顺序保持一致。
- > sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE)
- > sex
- [1] female male female female male
- Levels: female < male
3,有序因子
因子一般是无序的,这可以通过is.ordered函数来验证:
- > is.ordered(sex)
- [1] FALSE
有些因子的水平在语义上大于或小于其他水平,R支持按顺序排列的因子,使用ordered函数,或通过给factor函数传入order=TRUE参数,把因子转换为有序的因子。
例如,通过ordered函数把sex因子转换为有序的因子:
- > ordered(sex)
- [1] f m f f m
- Levels: f < m
或者,通过factor函数创建有序因子:
- > sex=factor(c('f','m','f','f','m'),levels=c('f','m'),ordered=TRUE)
- > sex
- [1] f m f f m
- Levels: f < m
附,特殊的操作符
整除操作符%/%,该操作符的两侧是整数,返回的结果是整数,不足1的小数取整为0:
- > 1%/%3
- [1] 0
- > 5%/%3
- [1] 1
取模操作符 %%,该操作符的两次是整数,返回的结果是整数,求整除的余数:
- > 5%%3
- [1] 2
参考文档:
Quick-R
如何理解R中因子(factor)的概念?
来源: http://www.cnblogs.com/ljhdo/p/5173674.html