常见数据类型
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。下图给出了这些数据结构的一个示意图:
查看数据类型
class()
使用class函数可以查看数据的类型,如下所示:
|
|
数据类型转换
常用函数如下所示:
|
|
使用如下所示:
|
|
向量
常见向量类型
向量可以是数值,字符,逻辑等,如下所示:
|
|
向量的下标
向量的元素下标取值是以1开始,例如:要前例中取x向量中值为1,则为x[2],如果一个向量中有一个字符,则该向量的类型会变成字符,如下所示:
|
|
向量的名称
|
|
向量元素的添加及合并
常用函数为c()
,append()
,如下所示:
|
|
运行结果如下所示:
|
|
如果逻辑变量与数值在一起,则为转换成数值。TRUE转变成1 and FALSE 转变成 0,如下所示:
|
|
在R语言中没有单一的整数、单一字符的概念,例如:X<-2
;X<-'a'
;R都是当作向量来处理,只是这个向量只包括单一值。
向量批量序列的生成
seq()
用法:seq(length=, from=, to=)
length:指定生成个数;from:是指开始生成的点;to:截止点。如果不指定,则默认条件下:seq(N1,N2,BY=),其中,n1:开始位置;n2:截止位置;by=指定间隔,如下所示:
|
|
rep()
用法:1. rep(P,N) 重复生成P值N次;2.rep(a1:a2,a1:a2) #重复a1到a2,按a1产生a1次,按a2产生a2次,如下所示:
|
|
向量索引
取子向量:通过下标实现
取某个元素:x[2];(如果X包括名称,注意:x[2]与x[[2]]的区别;
取某中几个:x[c(1,2,0)]
取某个/几个元素,利用-:x[-n]
向量排序
sort(); 输出排序后的结果;order();输出排序后的各个向量位置,如下所示:
|
|
向量运算
相加
|
|
向量:提取满足某一条件的向量
常见用法如下所示:
|
|
具体案例使用如下所示:
|
|
再看一案例
|
|
通过方括号中的data > 20 ,实现了我们想要的效果,具体是如何实现的呢?
|
|
data > 20 是一个表示式,它的返回值是一个有TRUE和FALSE 构成的逻辑向量,最终只选取了TRUE对应的元素,所以data 中大于20的元素被选了出来。通过下标和逻辑值两种方式,可以满足我们绝大部分的需求,但是有时候,我们只是想知道符合条件的值对应的下标,这个时候which 函数就派上了用场,如下所示:
|
|
==
操作符用来判断字符串相等,which 函数返回对应的下标,letters 这个向量中,第一个元素就是字母a, 所以返回值为1,如下所示:
|
|
%in%
操作符用来判断操作符左边的向量中的元素是否位于操作符右边的向量中,通过这种集合操作,可以方便的一次返回多个下标,使用subset函数也可以提取满足某一条件的向量元素,如下所示:
|
|
ifelse
|
|
ifelse和%in%
的联合使用,如下所示:
|
|
向量的比较
|
|
两组数据的集合运算
|
|
从上面可以看到%in%
这个操作符只返回逻辑向量TRUE 或者FALSE,而且返回值应该与%in%
这个操作符前面的向量程度相等。也就是说它相当于遍历了C里面的一个个元素,判断它们是否在B中出现过,然后返回是或者否即可。而match(C,B)
的结果就很不一样了,它的返回结果同样与前面的向量等长,但是它并非返回逻辑向量,而是遍历了C里面的一个个元素,判断它们是否在B中出现过,如果出现就返回在B中的索引号,如果没有出现,就返回NA,还来看一个match()
的案例,如下所示:
|
|
运行结果如下所示:
|
|