R常用数据结构
- 存放同类型数据:向量、矩阵、多维数组
- 存放不同类型数据:列表、数据框
- 分类变量数据:因子
- 其他:字符串、日期时间数据、时间序列数据、空间地理数据等
向量
定义
由一组相同类型的数值构成的序列
分类
数值向量
- 由数值组成的向量
- 单个数值被视作长度为1的数值向量
常用函数:
c()
:将多个对象合并
<number>:<number>
/seq()
:创建等差的数值向量
seq()
基本语法:seq(from, to, by, length.out, along.with, ...)
rep()
:创建元素重复的数值向量
rep()
基本语法“:rep(x, times, length.out, each, .….)
逻辑向量
- 由逻辑值组成的向量
- 其运算结果还是逻辑值
字符向量
- 由字符串组成的向量
- 注意:
- 一个字符串是字符向量的一个元素,字符向量并不会自动合并其中的字符串,每个字符串可以有自己的“名字”
常用函数和操作:
关于索引和按索引访问
R中的索引是从1开始的。有正向索引和负向索引,但不能同时使用正向索引和负向索引。
访问不存在的位置会返回
NA
使用
vector[<number1>:<number2>]
访问索引从number1到number2的元素,闭区间。使用
vector[<number1>,<number2>,]
访问索引为number1、number2等的元素可以使用逻辑向量来访问:输入与向量相同长度的逻辑向量,以此决定每一个元素是否要被获取。此处可以引申为根据特定条件访问向量的子集
-
可以在创建向量时对每个元素命名,之后就可以通过名字来访问元素
-
访问或修改向量元素的名字image.png
-
访问或修改向量元素的名字
-
区分
[]
和[[]]
:image.png
关于赋值和替换:
- 对向量子集赋值,就是先访问到向量子集,再赋值。
- 对不存在的位置赋值时,前面用
NA
补齐
writeLines()
:输出不带引号的字符串
which.max(v1)
:返回向量v1中最大值所在的位置
which.min(v1)
:返回向量v1中最小值所在的位置
对向量排序
sort()
:对向量排序。默认为升序decreasing=FALSE
order()
:返回排序后序列中的元素在原序列中的索引。以其输出作为索引访问元素时,可得到排好序的向量
rank()
:返回该向量中各个元素的“排名”。可通过参数method设置对相同值的处理方式
rev()
:将向量进行反转
矩阵
定义
由同一类型的元素组成的、有两个维度的向量
创建矩阵
matrix()
:将一个向量转换成矩阵
语法:
matrix(x, nrow, ncol, byrow, dimnames, .….)
创建特殊矩阵:
diag()
:创建对角矩阵
矩阵转化为向量
as.vector()
可将矩阵转化为向量,按列读取元素
访问矩阵
通常使用二维存取器[ , ]
进行访问,第一个参数是行,第二个参数是列,空缺的话代表所有元素。负索引表示忽略这一行/列
也可以使用一维索引,此时将矩阵视作按列展开的向量
可以根据逻辑矩阵访问矩阵,不过访问返回的是向量
矩阵运算
四则运算同向量
%*%
:矩阵乘法,若A%*%B
,要求A的列数等于B的行数
多维数组
定义
由同一类型的元素组成的
创建多维数组
array()
:将一个向量转化为多维数组
array(x, dim, dimnames, ……)
创建数组时对各个维度命名,也可以创建后再命名
访问多维数组
使用二维存取器[ , , ]
进行访问
获取多维数组的维数
dim()
:返回多维数组各维度的元素数
参考资料:
《R语言编程——基于tidyverse》张敬信