1、矩阵
在R语言中,矩阵是二维的,包括行和列,其中分为数值型、字符型、逻辑型三种,在每个矩阵中的矩阵元素的类型必须一致,可以通过matrix函数创建矩阵。
R
m <- matrix(1:20, nrow = 4, ncol = 5)
# 创建一个四行五列的数组,值为1到20,元素个数和行列必须对应
# 可以省略nrow和ncol,如:m <- matrix(1:20, 4, 5)
m <- matrix(1:20, nrow = 4, ncol = 6)
# 元素不够,循环使用数值
# 报错:数据长度[20]不是矩阵列数[6]的整倍
m <- matrix(1:20, nrow = 4, ncol = 4)
# 元素过多,取前16个元素载入
m <- matrix(1:20, nrow = 3, ncol = 3)
# 元素过多,取前 9 个元素载入
# 报错:数据长度[20]不是矩阵列数[3]的整倍
# 矩阵默认是按列进行排列的,上述也可省略为:
m <- matrix(1:20, 4)
# 会自动分为四行五列的矩阵进行排列
m <- matrix(1:20, 4,byrow = T)
# 按行进行四行五列的矩阵分配。byrow = F则设置为按列排列
可以通过rnames函数和cnames函数分别对行和列进行命名
R
# 设置行名
rnames <- c("R1","R2","R3","R4")
# 设置列名
cnames <- c("C1","C2","C3","C4","C5")
dimnames(m) <- list(rnames,cnames)
# 为上述矩阵命名,后续可用名称访问矩阵元素
通过维度的添加,可以把向量转变为矩阵
R
x <- 1:20
# 创建一个向量x
dim(x) <- c(4,5)
# 为向量x添加维度(四行五列)
# 操作之后x的类型转变为矩阵
矩阵的访问可以通过索引、名称等方式进行
R
# 其中矩阵m的创建通过上述的代码展示
m[1,2]
# 通过索引访问第一行第二列的元素,也可以通过名称访问,如:m["R1","C2"]
m[c(2:4),c(2:3)] # 访问矩阵的一个子集
m[2,] # 访问矩阵的第二行
m[,2] # 访问矩阵的第二列
m[2] # 访问第二行的第一个元素
m[-1,2] # 访问除了第一行外的第二列元素
矩阵的运算类似与向量的运算,需要保证行和列的关系
R
colSums(m,m) # 计算每一列的和
rowSums(m) # 计算每一行的和
#假设两个三行三列的向量
x <- matrix(1:9.3,3)
y <- matrix(2:10.3,3)
x*y # 矩阵的内积,即矩阵的点乘,对应位置相乘
x %*% y # 矩阵的外积,即矩阵的叉乘
diag(x)
# 输出一个向量,值依次返回矩阵的对角线的值,要求矩阵x的行数列数相同
t(x) # 输出x的转置矩阵
2、数组
不同于其他编程语言,在R语言中,数组表示多为矩阵 。数组是多维的、数值或字符的数据集,可以看作是矩阵的推广。
数组可以有多个维度,并且每个维度的大小可以不同。
可以使用 array()
函数创建数组。
R
x <- 1:20
dim(x) <- c(2,2,5)
# 为向量x添加三个维度
# 利用array()函数创建数组
# 假设三个维度的标签值:
dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
# 设置一个数组,数据为1到24,维度类型为(2,3,4),每个维度的名称为(dim1,dim2,dim3)
其他的内容可参考矩阵的内容
3、列表
列表是R中非常灵活的数据结构,可以包含不同类型的元素。
列表是存储很多内容的一个集合,是一些对象的有序集合,可以存储若干向量、矩阵、数据框、其他列表,即可以存储任何数据结构,是一维数据的结合。
R
mlist <- list(a,b,c,d)
# 创建列表
mlist <- list(first = a, second = b, third = c , forth = d)
# 创建列表并给每一部分命名
mlist[1]
class(mlist[1])
# 利用索引访问列表的第一个列表元素
# 返回mlist[1]的数据类型,一个[ ]的输出类型仍为列表
mlist[[1]]
class(mlist[[1]])
# 访问列表的第一个列表元素,且每次只能访问一个列表元素
# [[ ]]的输出类型为a,b,c,d的类型
mlist[c(1,4)] # 利用索引访问多个列表元素需要通过向量的方式
mlist[c("first","forth")] # 通过名称访问对应的列表元素
mlist$first
# 通过$符号对列表元素和名称进行访问,且数据类型等同于mlist[[1]],即原本向量的数据类型
mlist[[5]] <- iris
# mlist[[5]]可以直接赋值。iris 是内置数据库
# mlist[5]是一个列表,不能直接赋值
mlist <- list(mlist[-5])
# 删除第五个列表元素可以通过[-5]不显示第五个列表元素的方式进行赋值
mlist[[5]] <- NULL
#空白赋值进行删除第五个列表元素
4、数据框
数据框实际上是一个列表,列表元素是向量,向量构成列,因此每列的长度必须相同,且每列必须命名,每列必须同一类型,每一行不必。
表格式数据结构,由数据集合构成的矩形数组,行表示观测,列表示变量。
R
state <- data.frame(state.name,state.abb,state.region,state.x77)
# 数据框的创建,其中数据都是内置数据集,关于美国五十个州的,每一列长度相同
# 数据框是个列表,调出每一列方式同列表
state[1] # 调出数据框第一列,数据类型为列表
state$state.name # 调出数据框第一列,数据类型为矩阵
plot(women$height,women$weight)
# women是内置数据,可通过plot绘图,x轴为height,y轴为weigh
lm(weight ~height ,data = women)
# 拟合线性模型: weight 是响应变量(因变量)作为左侧的项
# height 是预测变量(自变量)作为右侧的项
# 用~连接,并且数据来自名为 women 的数据框
attach(mtcars)
# 加载数据框,可以直接输入行名或者列名作为对象进行访问数据,不需要索引或者$符号等方式
detach(mtcars)
# 删除加载,无法继续使用上述访问方法
with(mtcars,{mpg})
# 访问内置数据集mtcars中的mpg向量,注意是大括号
5、因子
在R语言中,因子(Factor)是一种特殊的数据类型,用于处理分类数据。因子可以被视为名义型(Nominal,无序)或有序型(Ordinal,有顺序)的类别变量。
在R语言中变量可以分为三个类型:
① 名义型变量:没有内在顺序的类别,比如城市、性别(男/女)、颜色(红/绿/蓝)等相互之间独立的变量。
② 有序型变量:有特定顺序的类别,比如质量评价(好、更好、最好)、教育水平(小学/中学/大学/研究生),不同值之间有顺序关系,但不是连续的数量变换。
③ 连续型变量:在某个范围内的任意值,比如年龄、gdp、具体高度等数据。
factor,其分类变量的可能值称为一个水平,level。水平值构成的向量称为因子
因子的应用: 计算频数、独立性实验、相关性实验、方差分析、主成分分析等。它们在统计分析中非常有用,尤其是在需要对数据进行分组或分类的情况下。
R
table(mtcars$cyl)
# 对因子中的数据进行频数统计
# 其中cyl就是factor,其中的数据值(4,6,8)就是level
f <- factor(c("red","red","green","blue","green"))
# 创建因子,其中 f 就是factor,("red","green","blue")就是level
week <- factor(c("Mon","Thu","Fri","Sat","Sun","Tue","Wed"))
# 创建的因子的level是按照输入的顺序来的
w1 <- c("Mon","Thu","Fri","Sat","Sun","Tue","Wed")
w2 <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
week <- factor( w1 , ordered = T , levels = w2 )
# ordered为TRUE定为有序,再通过level设定具体顺序,其中level的设定都需要创建向量的c函数
plot(mtcars$cyl) # 绘制的是散点图
plot(factor(mtcars$cyl)) # 绘制的是柱状图
cut(num,c(0,100,10))
# 假设num <- 1:100,cut函数将数据从1到100每十个进行一次划分,然后就变成因子了