文章目录
向量 (vector)
用于存储数值型、字符型、逻辑型数据的一维数组。
建立向量
- 枚举
A<-c(1,2,3,4,5)
- 数值序列
A<-seq(from=1,to=10,by=2) # 以2为步长,从1起始到10结束
- 同值重复
A<-rep("HUAWEI",times=5) # "HUAWEI"重复5次
选取向量元素/子集
- 单个元素
A[k] # 选取向量A中第k个元素
- 选取部分元素构成的子向量
A[子向量序号构成的向量B] # 选取向量A中序号为向量B中元素的向量
> A<-seq(from=1,to=10,by=3)
> A
[1] 1 4 7 10
> A[c(2,3)] # 选取向量A中序号满足向量c(2,3)中元素的向量
[1] 4 7
剔除部分元素构成的子向量
语法与上类似。不过在向量B之前加负号即可。
A[-子向量序号构成的向量B] # 选取向量A中序号**不**为向量B中元素的向量
> A=1:10
> A
[1] 1 2 3 4 5 6 7 8 9 10
> A[-(3:7)] # 选取向量A中序号不满足向量3:7中元素的向量
[1] 1 2 8 9 10
向量运算
原则
- 向量与标量进行定义于标量集中的运算:每个元素与标量运算,结果构成新向量的相应元素
- 向量与向量进行定义于标量集中的运算
- 向量A和向量B的元素数目相同:每个相同位置元素进行运算,结果构成新向量的相应元素
- 向量A和向量B的元素数目不同:元素少的向量将反复滚动调取其元素值与元素多的向量中相应位置元素进行运算
- e.g. 10元素向量A与3元素向量B进行运算,依次调用向量B中第1、2、3、1、2、3、1个元素与向量A中的第1~10个元素进行运算
基本的统计函数
函数 | 解释 |
---|---|
length() | 计算向量的元素个数 |
mean() | 计算均值 |
var() | 计算方差 |
sd() | 计算标准差 |
median() | 计算中位数 |
min() | 计算最小值 |
max() | 计算最大值 |
sum() | 求和 |
quantile() | 计算分位数 |
scale(x,center=TRUE,scale=TRUE) | 将向量x标准化,即所有元素减去均值并除以标准差,用于去量纲 |
scale(x,center=TRUE,scale=FALSE) | 将向量x中心化,即所有元素减去均值 |
因子 (factor)
- 变量一般有数值型、名义型、有序型3类
- 后2类在R中被称为因子 (factor)
- 在数据导入/录入时,因子通常以一簇整数向量对象的形式存储
- 使用函数
factor()
可以把向量形式的对象转化为因子形式的对象
factor()
函数
factor(x,levels=A,labels=B)
- 将向量对象x因子化
- 向量对象x的元素可取的值汇总于向量A中
- 映射到的因子对象的元素取值汇总于向量B中,每一个取值称为该因子对象的一个水平 (level),可使用函数
levels()
查看 - 习惯中,一般将向量x因子化后的对象命名为
x.f
sex<-c(1,2,1,2,1,1,2)
sex.f<-factor(sex,levels=c(1,2),labels=c("Male","Female"))
# 将向量对象sex因子化为因子对象sex.f
levels(sex.f)
# 查看向量对象sex.f的水平
改变参考水平
- 在某些数学模型中,需要指定因子对象的参考水平
- 如不进行特殊指定,会默认将定义的第1个水平作为参考水平
- 若需要重新定义因子对象的参考水平,使用函数
relevel()
sex.f=relevel(sex.f,ref="Female") # 将"Female"重设为参考水平的标签
声明为有序因子
在factor()
中声明参数ordered=TRUE
,表示声明的因子水平为有序的。
consc=c(1,2,3,3,2,1,1,2,1,1)
consc.f=factor(consc,levels=c(1,2,3),labels=c("VS","MCSminus","MCSplus"),ordered=TRUE)
# 将向量对象consc因子化为因子对象consc.f,声明其水平、标签,声明其为有序因子
矩阵 (matrix)
- 矩阵 (matrix)是一个由行 (row)和列 (column)组成的二位数组
- 其中每个元素都具有相同的数据类型
从向量创建矩阵
从向量A创建矩阵,使用matrix()
函数:
matrix(A,nrow=n)
- 从向量A创建矩阵,设定行数为n,将向量A的元素逐个、按列将元素填进矩阵
- 若要设定列数,则增加声明
ncol=m #设定列数为m
;注意nrow
、ncol
的声明只需要一个即可 - 若要将元素按行填入矩阵,则增加声明
byrow=TRUE
(若不声明,该参数默认为FALSE)
基本矩阵运算
函数 | 解释 |
---|---|
+ | 矩阵加 |
%*% | 矩阵乘 |
dim() | 以二维列向量形式,输出矩阵的行、列数 |
t() | 矩阵转置 |
det() | 输出方阵的行列式 |
solve() | 输出方阵的逆矩阵 |
rowSums() | 将矩阵按行求和,并输出为列向量 |
colSums() | 将矩阵按列求和,并输出为列向量 |
rowMeans() | 将矩阵按行求均值,并输出为列向量 |
colMeans() | 将矩阵按行求均值,并输出为列向量 |
选取矩阵元素/子矩阵
从矩阵A中选取某些行、某些列拼合成新矩阵,语法如下:
A[M,N]
- M:代表A中拟选取的行的向量序号
- N:代表A中拟选取的列的向量序号
- 当需要选取所有行/所有列的元素时,对应的行序号/列序号可省略不写
> A<-matrix(1:9,nrow=3)
> A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> A[2,2] # 选取A中第2行第2列的元素
[1] 5
> A[c(1,2),c(1,2)] # 选取A中第1、2行与第1、2列的元素
[,1] [,2]
[1,] 1 4
[2,] 2 5
> A[c(1,3),c(1,3)] # 选取A中第1、3行与第1、3列的元素
[,1] [,2]
[1,] 1 7
[2,] 3 9
> A[c(1,2),] # 选取A中第1、2行元素与所有列的元素
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
> A[,c(2,3)] # 选取A中所有行与第2、3列的元素
[,1] [,2]
[1,] 4 7
[2,] 5 8
[3,] 6 9
数组 (array)
- 数组 (array)是一具有≥3个维度的数据结构
- 其各个维度下的维度值保存为一列向量,称为数组的维度 (dimension, dim)
从向量生成数组
声明向量与维度,可以生成数组,语法如下:
array(A,dim=B)
- A:用于填充数组元素的向量
- B:声明数组的维度
> A=array(1:24,dim=c(3,4,2))
# c(3,4,2)表示这是一个3维数组,每1维的长度为3、4、2
> A
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
使用dimnames
,可以声明各维度的名称:
> dim1<-c("A1","A2","A3")
> dim2<-c("B1","B2","B3","B4")
> dim3<-c("C1","C2")
> A=array(1:24,dim=c(3,4,2),dimnames=list(dim1,dim2,dim3))
> A
, , C1
B1 B2 B3 B4
A1 1 4 7 10
A2 2 5 8 11
A3 3 6 9 12
, , C2
B1 B2 B3 B4
A1 13 16 19 22
A2 14 17 20 23
A3 15 18 21 24
列表 (list)
- 列表 (list):最为灵活的数据结构,由一簇可以是任意形式的对象混合组成
- 通过
list()
函数可以新建列表 - 许多函数返回的结果是以列表形式存储的
list()
函数
list()
中参数为参与形成该列表的所有对象,将其列举出来即可。
> A<-1
> B<-"HUAWEI"
> c<-FALSE
> d<-matrix(1:9,nrow=3)
> list(A,B,c,d) # 简单列举出参与形成列表的所有对象即可
[[1]]
[1] 1
[[2]]
[1] "HUAWEI"
[[3]]
[1] FALSE
[[4]]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
引用列表中的对象
使用列表名$列表中对象名
语法,可以引用列表中的对象。
> A=list(a=1,b=2)
> A$a+A$b
[1] 3
数据框 (dataframe)
- 数据框 (dataframe):一种特殊的列表,呈现为行列构成的二维结构
- 其中每一列表示1个变量 (variable)或指标 (indicator)
- 每一行表示1个观测 (observtion)或记录 (record)或个案
- 结构化数据的基本呈现形式
使用data.frame()
建立数据框
根据已有的列向量数据,使用data.frame()
函数可建立数据框,语法如下:
M<-data.frame(A,B,C,D) #从列向量A、B、C、D建立数据框M
# e.g.
> ID<-1:5
> sex<-c(1,2,1,1,2)
> age<-c(12,15,27,29,52)
> score<-c(90,85,85,72,90)
> sex.f<-factor(sex,levels=c(1,2),labels=c("Male","Female")) # 将分类变量sex转化为因子对象
> M<-data.frame(ID,sex.f,age,score)
> M
ID sex.f age score
1 1 Male 12 90
2 2 Female 15 85
3 3 Male 27 85
4 4 Male 29 72
5 5 Female 52 90
调用数据框的特定列
数据框的本质也是列表,故同样可以采用数据框名$变量名
方式调用数据框的特定列。
> M$score
[1] 90 85 85 72 90
数据类型判断与转换
- 判断:通用形式为
is.数据类型(对象名)
,判断对象是否为特定数据类型,返回值为TRUE或FALSE - 转换:通用形式为
as.数据类型(对象名)
,将对象转换为特定数据类型
判断 | 转换 |
---|---|
is.numeric() | as.numeric() |
is.character() | as.character() |
is.logical() | as.logical() |
is.factor() | as.factor() |
is.vector() | as.vector() |
is.matrix() | as.matrix() |
is.array() | as.array() |
is.dataframe() | as.dataframe() |
is.list() | as.list() |
is.table() | as.table |