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每十个进行一次划分,然后就变成因子了
相关推荐
西岸行者7 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意7 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码7 天前
嵌入式学习路线
学习
毛小茛7 天前
计算机系统概论——校验码
学习
babe小鑫7 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms7 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下7 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。7 天前
2026.2.25监控学习
学习
im_AMBER7 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J7 天前
从“Hello World“ 开始 C++
c语言·c++·学习