RStudio学习笔记(三):其他数据结构

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每十个进行一次划分,然后就变成因子了
相关推荐
YmgmY20 分钟前
推荐算法学习笔记2.2:基于深度学习的推荐算法-基于特征交叉组合+逻辑回归思路的深度推荐算法-Deep Crossing模型
笔记·学习·推荐算法
cool 32133 分钟前
python学习-函数
学习
铁匠匠匠1 小时前
django学习入门系列之第三点《案例 小米商城二级菜单》
前端·css·经验分享·python·学习·django·前端框架
jiayoushijie-泽宣1 小时前
深入浅出3D感知中的优化与基于学习的技术 (第二章) 原创教程
人工智能·学习·算法·机器学习·3d·机器人
2301_795168581 小时前
昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分
人工智能·深度学习·学习
svygh1232 小时前
运动馆预约管理系统设计
学习·软件设计·系统设计·系统文档·设计文档
VertexGeek2 小时前
昇思25天学习打卡营第13天|BERT
人工智能·学习·bert
冯诺依曼转世2 小时前
JDBC1(JDBC相关类与接口 连接mysql数据库 测试 不同数据库厂商实现-MySQL和Oracle)
开发语言·数据库·笔记·学习·mysql·oracle
tRNA做科研3 小时前
【基于R语言群体遗传学】-1-哈代温伯格基因型比例
开发语言·r语言
tyrolin3 小时前
鸿蒙OS开发者高级学习第2课:自由流转(含习题答案)
学习·华为·harmonyos