当前位置:   article > 正文

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

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

1、矩阵    

        在R语言中,矩阵是二维的,包括行和列,其中分为数值型、字符型、逻辑型三种,在每个矩阵中的矩阵元素的类型必须一致,可以通过matrix函数创建矩阵。

  1. m <- matrix(1:20, nrow = 4, ncol = 5)
  2. # 创建一个四行五列的数组,值为1到20,元素个数和行列必须对应
  3. # 可以省略nrow和ncol,如:m <- matrix(1:20, 4, 5)
  4. m <- matrix(1:20, nrow = 4, ncol = 6)
  5. # 元素不够,循环使用数值
  6. # 报错:数据长度[20]不是矩阵列数[6]的整倍
  7. m <- matrix(1:20, nrow = 4, ncol = 4)
  8. # 元素过多,取前16个元素载入
  9. m <- matrix(1:20, nrow = 3, ncol = 3)
  10. # 元素过多,取前 9 个元素载入
  11. # 报错:数据长度[20]不是矩阵列数[3]的整倍
  12. # 矩阵默认是按列进行排列的,上述也可省略为:
  13. m <- matrix(1:20, 4)
  14. # 会自动分为四行五列的矩阵进行排列
  15. m <- matrix(1:20, 4,byrow = T)
  16. # 按行进行四行五列的矩阵分配。byrow = F则设置为按列排列

        可以通过rnames函数和cnames函数分别对行和列进行命名

  1. # 设置行名
  2. rnames <- c("R1","R2","R3","R4")
  3. # 设置列名
  4. cnames <- c("C1","C2","C3","C4","C5")
  5. dimnames(m) <- list(rnames,cnames)
  6. # 为上述矩阵命名,后续可用名称访问矩阵元素

        通过维度的添加,可以把向量转变为矩阵

  1. x <- 1:20
  2. # 创建一个向量x
  3. dim(x) <- c(4,5)
  4. # 为向量x添加维度(四行五列)
  5. # 操作之后x的类型转变为矩阵

        矩阵的访问可以通过索引、名称等方式进行

  1. # 其中矩阵m的创建通过上述的代码展示
  2. m[1,2]
  3. # 通过索引访问第一行第二列的元素,也可以通过名称访问,如:m["R1","C2"]
  4. m[c(2:4),c(2:3)] # 访问矩阵的一个子集
  5. m[2,] # 访问矩阵的第二行
  6. m[,2] # 访问矩阵的第二列
  7. m[2] # 访问第二行的第一个元素
  8. m[-1,2] # 访问除了第一行外的第二列元素

        矩阵的运算类似与向量的运算,需要保证行和列的关系

  1. colSums(m,m) # 计算每一列的和
  2. rowSums(m) # 计算每一行的和
  3. #假设两个三行三列的向量
  4. x <- matrix(1:9.3,3)
  5. y <- matrix(2:10.3,3)
  6. x*y # 矩阵的内积,即矩阵的点乘,对应位置相乘
  7. x %*% y # 矩阵的外积,即矩阵的叉乘
  8. diag(x)
  9. # 输出一个向量,值依次返回矩阵的对角线的值,要求矩阵x的行数列数相同
  10. t(x) # 输出x的转置矩阵

2、数组

        不同于其他编程语言,在R语言中,数组表示多为矩阵 。数组是多维的、数值或字符的数据集,可以看作是矩阵的推广。

        数组可以有多个维度,并且每个维度的大小可以不同。

        可以使用 array() 函数创建数组。

  1. x <- 1:20
  2. dim(x) <- c(2,2,5)
  3. # 为向量x添加三个维度
  4. # 利用array()函数创建数组
  5. # 假设三个维度的标签值:
  6. dim1 <- c("A1","A2")
  7. dim2 <- c("B1","B2","B3")
  8. dim3 <- c("C1","C2","C3","C4")
  9. z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
  10. # 设置一个数组,数据为1到24,维度类型为(2,3,4),每个维度的名称为(dim1,dim2,dim3)

        其他的内容可参考矩阵的内容

3、列表

        列表是R中非常灵活的数据结构,可以包含不同类型的元素。

        列表是存储很多内容的一个集合,是一些对象的有序集合,可以存储若干向量、矩阵、数据框、其他列表,即可以存储任何数据结构,是一维数据的结合。

  1. mlist <- list(a,b,c,d)
  2. # 创建列表
  3. mlist <- list(first = a, second = b, third = c , forth = d)
  4. # 创建列表并给每一部分命名
  5. mlist[1]
  6. class(mlist[1])
  7. # 利用索引访问列表的第一个列表元素
  8. # 返回mlist[1]的数据类型,一个[ ]的输出类型仍为列表
  9. mlist[[1]]
  10. class(mlist[[1]])
  11. # 访问列表的第一个列表元素,且每次只能访问一个列表元素
  12. # [[ ]]的输出类型为a,b,c,d的类型
  13. mlist[c(1,4)] # 利用索引访问多个列表元素需要通过向量的方式
  14. mlist[c("first","forth")] # 通过名称访问对应的列表元素
  15. mlist$first
  16. # 通过$符号对列表元素和名称进行访问,且数据类型等同于mlist[[1]],即原本向量的数据类型
  17. mlist[[5]] <- iris
  18. # mlist[[5]]可以直接赋值。iris 是内置数据库
  19. # mlist[5]是一个列表,不能直接赋值
  20. mlist <- list(mlist[-5])
  21. # 删除第五个列表元素可以通过[-5]不显示第五个列表元素的方式进行赋值
  22. mlist[[5]] <- NULL
  23. #空白赋值进行删除第五个列表元素

4、数据框 

        数据框实际上是一个列表,列表元素是向量,向量构成列,因此每列的长度必须相同,且每列必须命名,每列必须同一类型,每一行不必。

        表格式数据结构,由数据集合构成的矩形数组,行表示观测,列表示变量。

  1. state <- data.frame(state.name,state.abb,state.region,state.x77)
  2. # 数据框的创建,其中数据都是内置数据集,关于美国五十个州的,每一列长度相同
  3. # 数据框是个列表,调出每一列方式同列表
  4. state[1] # 调出数据框第一列,数据类型为列表
  5. state$state.name # 调出数据框第一列,数据类型为矩阵
  6. plot(women$height,women$weight)
  7. # women是内置数据,可通过plot绘图,x轴为height,y轴为weigh
  8. lm(weight ~height ,data = women)
  9. # 拟合线性模型: weight 是响应变量(因变量)作为左侧的项
  10. # height 是预测变量(自变量)作为右侧的项
  11. # 用~连接,并且数据来自名为 women 的数据框
  12. attach(mtcars)
  13. # 加载数据框,可以直接输入行名或者列名作为对象进行访问数据,不需要索引或者$符号等方式
  14. detach(mtcars)
  15. # 删除加载,无法继续使用上述访问方法
  16. with(mtcars,{mpg})
  17. # 访问内置数据集mtcars中的mpg向量,注意是大括号

5、因子

        在R语言中,因子(Factor)是一种特殊的数据类型,用于处理分类数据。因子可以被视为名义型(Nominal,无序)或有序型(Ordinal,有顺序)的类别变量。

        在R语言中变量可以分为三个类型:

① 名义型变量:没有内在顺序的类别,比如城市、性别(男/女)、颜色(红/绿/蓝)等相互之间独立的变量。

② 有序型变量:有特定顺序的类别,比如质量评价(好、更好、最好)、教育水平(小学/中学/大学/研究生),不同值之间有顺序关系,但不是连续的数量变换。

③ 连续型变量:在某个范围内的任意值,比如年龄、gdp、具体高度等数据。

        factor,其分类变量的可能值称为一个水平,level。水平值构成的向量称为因子

        因子的应用: 计算频数、独立性实验、相关性实验、方差分析、主成分分析等。它们在统计分析中非常有用,尤其是在需要对数据进行分组或分类的情况下。

  1. table(mtcars$cyl)
  2. # 对因子中的数据进行频数统计
  3. # 其中cyl就是factor,其中的数据值(4,6,8)就是level
  4. f <- factor(c("red","red","green","blue","green"))
  5. # 创建因子,其中 f 就是factor,("red","green","blue")就是level
  6. week <- factor(c("Mon","Thu","Fri","Sat","Sun","Tue","Wed"))
  7. # 创建的因子的level是按照输入的顺序来的
  8. w1 <- c("Mon","Thu","Fri","Sat","Sun","Tue","Wed")
  9. w2 <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
  10. week <- factor( w1 , ordered = T , levels = w2 )
  11. # ordered为TRUE定为有序,再通过level设定具体顺序,其中level的设定都需要创建向量的c函数
  12. plot(mtcars$cyl) # 绘制的是散点图
  13. plot(factor(mtcars$cyl)) # 绘制的是柱状图
  14. cut(num,c(0,100,10))
  15. # 假设num <- 1:100,cut函数将数据从1到100每十个进行一次划分,然后就变成因子了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/776710
推荐阅读
相关标签
  

闽ICP备14008679号